您的位置:

Spring ORM应用详解

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