一、整合目的
- 简化开发:通过整合,开发者可以在Spring的IOC(控制反转)和AOP(面向切面编程)等特性的支持下,更高效地管理MyBatis的SqlSessionFactory和SqlSession等对象。
- 提高可维护性:整合后,数据库配置和事务管理等可以集中管理,使得代码更加整洁和易于维护。
- 事务管理:Spring提供了强大的事务管理功能,可以方便地管理MyBatis的数据库操作事务。
二、整合步骤
- 添加依赖:
- 在项目的pom.xml(如果是Maven项目)或build.gradle(如果是Gradle项目)中添加必要的依赖。
- 配置数据源:
- 在Spring的配置文件(如applicationContext.xml)中配置数据源(DataSource),常用的数据源有Druid、DBCP、C3P0等。
- 数据源的配置信息(如URL、用户名、密码等)可以放在单独的属性文件(如db.properties)中,然后通过Spring的<context:property-placeholder>标签引入。
- 配置SqlSessionFactory:
- 使用org.mybatis.spring.SqlSessionFactoryBean来创建SqlSessionFactory对象,并将其配置在Spring的配置文件中。
- 通过dataSource属性注入数据源,并可通过configLocation属性指定MyBatis的配置文件(mybatis-config.xml),如果不需要保留MyBatis的配置文件,也可以通过SqlSessionFactoryBean的属性直接配置。
- 配置Mapper:
- 可以通过MapperFactoryBean的方式配置Mapper接口,但更常见的是使用@Mapper注解或者@MapperScan注解来自动扫描Mapper接口。
- Mapper接口中的方法可以直接通过Spring的IOC容器进行管理,并通过@Autowired注解注入到Service层或其他组件中。
- 事务管理:
- 在Spring的配置文件中配置事务管理器(TransactionManager),通常使用DataSourceTransactionManager或JtaTransactionManager。
- 使用@Transactional注解在Service层的方法上声明事务,Spring会在方法执行前后自动开启和关闭事务。
三、整合优势
- 解耦:通过Spring的IOC容器管理MyBatis的SqlSessionFactory和Mapper等对象,实现了业务逻辑与数据访问逻辑的解耦。
- 灵活性:Spring提供了多种方式来配置MyBatis,包括XML配置、注解配置和Java配置等,开发者可以根据项目需求灵活选择。
- 可扩展性:整合后的系统可以通过添加新的Mapper接口和Service层类来轻松扩展功能,无需修改现有代码。
配置DAO及优化方式有以下四种:
- SqlSessionTemplate MyBatis-Spring提供了SqlSessionTemplate类,继承了SqlSession接口,操作数据库
- SqlSessionDaoSupport MyBatis-Spring提供了通过this.getSqlSession()方法获得SqlSession实例操作数据库,不需要定义SqlSession对象,使用起来更方便
- MapperFactoryBean MyBatis-Spring提供的MapperFactoryBean能够以配置的方式生成映射器的实现类,并注入给业务组件,无需编写DAO实现类
- MapperScannerConfig MyBatis-Spring提供的MapperScannerConfigurer将递归扫描基准包(包括各层级子包)下所有接口。如果他们在SQL映射文件中定义过,则将它们动态注册为映射器实现类,即可批量生成映射器的实现类了