一、Spring ORM簡介
Spring ORM是Spring框架在數據訪問層的一個重要模塊,主要是為了在Spring應用中整合多種ORM框架,比如Hibernate、Mybatis等,方便在Spring項目中進行數據持久化操作。
使用Spring ORM,可以通過註解或者xml配置的方式,快速的將ORM框架整合到應用中,避免了大量的樣板代碼,同時也簡化了數據訪問層的代碼。
二、Spring ORM集成Hibernate
將Hibernate整合到Spring ORM中的步驟:
1. 引入相關的依賴包:
<!--Hibernate-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.20.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.20.Final</version>
</dependency>
<!-- Spring ORM-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
2. 配置Hibernate相關的屬性,如數據庫連接信息、mapping文件等。
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources"><list>
<value>com/dxy/pojo/Student.hbm.xml</value>
</list></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
</props>
</property>
</bean>
3. 使用HibernateTemplate或者註解方式進行數據訪問操作。
使用HibernateTemplate的方式:
@Component
public class StudentDaoImpl extends HibernateDaoSupport implements StudentDao{
@Override
public void save(Student student) {
getHibernateTemplate().save(student);
}
}
使用註解方式進行數據訪問操作:
@Repository
public class StudentDaoImpl implements StudentDao{
@Autowired
private SessionFactory sessionFactory;
@Override
public void save(Student student) {
sessionFactory.getCurrentSession().save(student);
}
}
三、Spring ORM集成Mybatis
將Mybatis整合到Spring ORM中的步驟:
1. 引入相關的依賴包:
<!--Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- Spring ORM-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
2. MySqlSessionFacotryBean是Mybatis整合Spring的關鍵,可以直接使用其中的SqlSessionFactoryBean對Mybatis進行配置。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com.dxy.mapper/*.xml"/>
</bean>
3. 開發Mapper映射文件和Mapper接口,同時使用註解進行數據操作:
@Repository
public interface StudentMapper {
@Insert("insert into tb_student(name, age, gender) values(#{name}, #{age}, #{gender})")
public void save(Student student);
}
4. 配置MapperScannerConfigurer自動掃描Mapper接口,並將接口注入到Spring容器中。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dxy.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
四、Spring ORM事務管理
Spring ORM為我們提供了很好的事務管理機制,可以輕鬆的集成系統和自定義的事務管理器。
在Spring中,使用@Transactional註解即可對方法進行事務管理,其中參數可以指定事務管理器bean的名稱,也可以使用默認的事務管理器。
@Service
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentDao studentDao;
@Transactional
@Override
public void save(Student student) {
studentDao.save(student);
}
}
也可以使用配置文件的方式進行事務管理器的配置,如下:
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
五、Spring ORM使用建議
1. 在項目開發步驟中,建議先為Hibernate或Mybatis進行獨立的配置和單元測試,確保ORM框架本身的正確性和性能優化。
2. 在整合Spring ORM框架時,建議對集成的ORM框架進行了解,如Hibernate的二級緩存、慢查詢優化等特性,以便更加合理的使用。
3. 需要注意的是,在事務控制上,Spring ORM與Hibernate或Mybatis都提供了自己的事務管理機制,需要避免事務管理的重複。
六、總結
Spring ORM極大的簡化了數據訪問層中的代碼,同時也提供了豐富的ORM框架的整合和事務管理機制。在實際項目開發中,可以靈活選擇使用Hibernate、Mybatis等ORM框架,並根據實際情況進行性能調優。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/197238.html