【数据库】mybatis & Mybatis-spring
MyBatis-Spring
主要作用是将纯 MyBatis 框架无缝集成到 Spring/Spring Boot 的生态中,让 MyBatis 能够利用 Spring 的核心功能(如 IOC 容器和声明式事务管理),从而省去大量手动创建
SqlSessionFactory、管理 SqlSession 以及编写重复事务控制代码的繁琐工作。 [1, 2, 3]详细对比原生 MyBatis,MyBatis-Spring 的核心作用和优势体现在:
1. 融入 Spring IOC 容器(自动创建与注入 Bean)
- 纯 MyBatis:需要开发者手动通过
SqlSessionFactoryBuilder读取配置文件构建SqlSessionFactory,再手动打开SqlSession,获取 Mapper 并在用完后手动close()。
- MyBatis-Spring:通过
MapperFactoryBean或自动扫描机制,把 MyBatis 的 Mapper 接口直接交给 Spring IOC 容器管理,让开发者能够像注入普通 Service 一样,直接在业务层@Autowired注入 Mapper 接口对象。
2. 参与并简化事务管理
- 纯 MyBatis:数据库的提交(
commit)、回滚(rollback)以及关闭连接需要开发者在代码中显式调用。
- MyBatis-Spring:允许 MyBatis 参与到 Spring 的事务管理之中。开发者只需使用
@Transactional注解,由 Spring AOP 统一管理事务,消除大部分编程式事务的模板代码。
3. 生命周期与线程安全优化
- 纯 MyBatis:如果不小心在多线程环境下直接共享同一个
SqlSession,会出现线程安全问题。
- MyBatis-Spring:创建线程安全、与 Spring 事务同步的
SqlSession(底层通过SqlSessionTemplate),它会自动管理会话的生命周期,确保在 Spring 事务中获取的是同一个会话,用完安全释放。
Mybatis 的 Mapper 注入到 Spring 容器的几种方式
1、在applicationContext.xml中使用<mybatis:scan base-package=XX />
2、在applicationContext.xml中使用bean标签注册MapperScannerConfigurer
3、如果应用使用Java配置方式而不是XML;则在@Configuration配置类使用 @MapperScan或者 @MapperScans注解
MyBatis-Spring 底层核心类(如 SqlSessionFactoryBean、SqlSessionTemplate)
浙公网安备 33010602011771号