Spring Boot项目中MyBatis与Spring Data+Hibernate临时共存是否可行?
Spring Boot下Hibernate与MyBatis共存方案解答
核心结论
- 两者完全可以在过渡阶段同时运行,不存在框架层面的兼容性冲突
- 二者可以共享Spring Boot默认的HikariCP连接池与数据源,该方案生产级可行,不会额外浪费连接资源
底层逻辑说明
ORM框架本质只是JDBC的上层封装实现,Hibernate和MyBatis最终都依赖javax.sql.DataSource接口获取数据库连接,只要指向同一个DataSource实例,就会共用同一个连接池的资源,符合JDBC的标准设计。
最简配置步骤
无需修改原有Hibernate相关配置,仅需补充MyBatis的配置即可:
- 引入MyBatis官方Spring Boot Starter依赖
<!-- Maven 依赖示例 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>请选择与当前Spring Boot版本兼容的版本</version> </dependency>
- 配置MyBatis Mapper扫描路径
在启动类或者配置类上添加@MapperScan("你的Mapper接口所在包路径")注解,或者给每个Mapper接口添加@Mapper注解即可。
注意:无需为MyBatis单独配置数据源,Spring Boot的MyBatis Starter会自动注入上下文已经初始化的Hikari数据源,和Hibernate使用的是同一个实例。
过渡阶段注意事项
- 事务可以统一使用Spring的声明式事务
@Transactional管理,同一个数据源下的Hibernate、MyBatis操作会纳入同一个事务,保证数据一致性 - 若原有项目开启了Hibernate二级缓存,建议迁移阶段暂时关闭,或做好缓存变更的同步逻辑,避免两套缓存数据不一致导致业务异常
- 迁移可以按业务模块灰度进行:新功能全部使用MyBatis开发,再逐步将原有Hibernate实现的持久层代码替换为MyBatis实现,全量替换完成后再移除Hibernate相关依赖和配置即可。
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

