一、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框架,并根据实际情况进行性能调优。