这才是多数据源的正确打开方式!MyBatis-Plus vs Hibernate 底层原理大揭秘,别再瞎配了

news/2026/1/27 9:37:57/文章来源:https://www.cnblogs.com/sprinng/p/19535843

大家好,最近在技术群(QQ群)里,有个小伙伴问了我一个极其经典的问题:“我项目里想做读写分离,是用 Hibernate 的分包配置好,还是 MyBatis-Plus 的动态数据源好?为什么我配置了 JPA 多数据源,事务老是报错?”

这其实触碰到了 Java 后端架构中一个非常痛点的领域:多数据源(Multi-DataSource)的管理

市面上 90% 的教程只教你怎么贴配置,却没告诉你原理。结果就是上线后,要么事务回滚失败,要么切库切了个寂寞。

今天,我们就把 MyBatisMyBatis-PlusHibernate 拉到手术台上,从底层源码的角度,彻底讲透它们的区别以及多数据源的最佳解法。

一、 为什么多数据源这么难搞?

在 Spring 的世界里,单数据源是幸福的。容器启动时,创建一个 DataSource,这就好比你只有一张银行卡,刷卡时不需要动脑子。

但当你需要连接多个数据库(比如:主从库读写分离、分库分表、或者连接老系统的遗留库)时,问题就来了:Spring 怎么知道这一行 SQL 该发给谁?

本质上,多数据源的实现只有两条路:

  1. 静态分包(物理隔离): 你的 UserMapper 永远连库 A,OrderMapper 永远连库 B。
  2. 动态路由(逻辑切换): 同一个 UserMapper,这一次查库 A,下一次查库 B。

二、 核心原理:Spring 的“魔术师”

无论你用 MyBatis 还是 Hibernate,想要实现动态切换,绕不开 Spring 提供的一个核心类:AbstractRoutingDataSource

它的原理其实非常简单,就像一个路由器

  1. 它内部维护了一个 Map<Object, DataSource>,存了所有可用的真实数据源。
  2. 它实现了一个方法 determineCurrentLookupKey()
  3. 关键点: 当数据库连接被请求时,它会先去调用这个方法,通常是从当前线程的 ThreadLocal 中拿到一个 Key(比如 "master" 或 "slave")。
  4. 拿着 Key 去 Map 里找,找到谁,就用谁。

听起来很简单?别急,坑在后面。 不同的 ORM 框架对这个“路由器”的兼容性天差地别。


三、 Hibernate (JPA) 的“倔强”

很多用 JPA 的同学尝试用 AbstractRoutingDataSource 做动态切换,往往会撞得头破血流。

为什么?因为 Hibernate 太“智能”了。

Hibernate 有一级缓存(Session)和复杂的上下文管理。在一个事务(Transaction)开启的瞬间,Hibernate 就需要确定 EntityManager,并绑定一个数据库连接。一旦绑定,在这个事务结束前,它通常不会轻易释放或切换连接。

这就导致了一个经典 Bug:你在 Service 层加了注解想切库,但因为事务早已开启,Hibernate 根本不理会你的 ThreadLocal 变动,依然倔强地用着主库的连接。

Hibernate 的最佳解法:分包隔离(Split Packages)

既然动态切换容易出事,那就物理隔离。

  • 将所有连接 A 库的 Repository 放在 com.app.repo.primary
  • 将所有连接 B 库的 Repository 放在 com.app.repo.secondary
  • 配置两套 EntityManagerFactoryTransactionManager

虽然配置繁琐(要写两个 Configuration 类),但这是 JPA 下最稳健的方案。

四、 MyBatis-Plus 的“优雅”

相比之下,MyBatis(及其增强版 MyBatis-Plus)就显得非常轻量级听话

MyBatis 执行 SQL 的过程是无状态的,它没有复杂的 Session 缓存包袱。只要在执行 SQL 的那一刻,SqlSessionFactory 拿到了正确的连接,它就能工作。

因此,MyBatis-Plus (MP) 成为了国内处理多数据源的首选。

MP 生态中有一个神器:dynamic-datasource-spring-boot-starter。它的实现原理是 AOP + AbstractRoutingDataSource 的完美结合:

  1. 注解标记: 在方法上加 @DS("slave")
  2. AOP 拦截: 拦截器在方法执行前,把 "slave" 塞进 ThreadLocal
  3. 路由执行: 到底层执行 SQL 时,路由器读取 ThreadLocal,瞬间切换数据源。
  4. 自动清理: 方法结束后,AOP 自动清理 ThreadLocal,防止污染。

五、 原理可视化(点击查看大图)

为了让你更直观地理解,三味画了两张图:

图 1: Spring 动态数据源路由原理 (通用)

image-20260126221332757

图 2: MyBatis-Plus vs Hibernate 多数据源策略对比

image-20260126222731834


六、 抄作业:企业级最佳实践代码

如果你在做互联网业务系统,强烈建议使用 MyBatis-Plus + dynamic-datasource 的组合。这是目前最优雅、代码侵入性最小的方案。

1. 引入依赖 (pom.xml)

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.6.1</version>
</dependency>

2. 配置文件 (application.yml)
看,多么清爽!

spring:datasource:dynamic:primary: master # 默认走主库strict: false # 严格模式,匹配不到数据源是否报错datasource:master:url: jdbc:mysql://192.168.1.100:3306/main_dbusername: rootslave_1:url: jdbc:mysql://192.168.1.101:3306/main_dbusername: root

3. 业务代码 (Service)
一个注解搞定切换,谁用谁知道。

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;// 默认走 master,用于写入public void createOrder(Order order) {orderMapper.insert(order);}// 显式声明走从库,用于查询@DS("slave_1")public Order getOrderInfo(Long id) {return orderMapper.selectById(id);}
}

七、 避坑指南(重点!)

如果你一定要在项目中混用(JPA + MP)或者使用多数据源,请务必注意:

  1. 事务的边界: @Transactional 开启时,连接就已经确定了!不要试图在 @Transactional 方法内部再去调用加了 @DS 的方法,不会生效的! 数据源切换必须发生在事务开启之前。
  2. 连接泄露: 以前手动写 ThreadLocal 切换数据源时,最容易忘记 remove(),导致线程复用时带着上一次的脏数据源。使用 MP 的 Starter 可以帮你自动处理这个清理工作。

总结

  • Hibernate/JPA: 适合业务逻辑极其复杂、领域模型驱动(DDD)的项目,多数据源建议用分包隔离
  • MyBatis/MyBatis-Plus: 适合绝大多数互联网业务、需要极致 SQL 掌控的项目,多数据源建议用 dynamic-datasource 动态切换。
  • 原理: 一切魔法的尽头,都是 Spring 的 AbstractRoutingDataSource 和 AOP。

只有懂到底层,才能在报错时从容不迫。

如果你觉得这篇文章让你学到了东西,哪怕是一个知识点,请帮点个赞或者转发给需要的朋友,这对我很重要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1223386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点工业打包机直销品牌,蓝景自动化性价比排名前列

2025年制造业智能化转型加速,自动化包装设备已成为企业提升生产效率、降低运营成本的核心支撑。无论是工业打包机的高效捆扎、重型打包机的重载适配,还是穿剑式打包机的栈板一体化包装,优质设备服务商的技术实力与解…

省选集训 15 - 交互题

[eJOI 2022] Where Is the Root? 不难得出所有叶子节点的 LCA 即为根节点,分两种情况讨论: 根节点为叶子节点:直接二分询问叶子节点集合,如果返回 YES 则根节点在集合中。 根节点不为叶子节点:二分询问非叶子节点…

2026年三亚靠谱的汽车租赁门店联系电话,包头到三亚靠谱的汽车租赁公司联系方式技术实力与市场口碑领航者

随着旅游市场复苏与跨区域出行需求激增,汽车租赁行业迎来结构性增长机遇。消费者对车辆品质、服务响应及异地还车能力的关注度显著提升,头部企业通过技术赋能与全场景覆盖,逐步构建差异化壁垒。本文基于企业资质、服…

高清免费正版图片素材网站推荐:2026年十大图库资源平台盘点

在内容创作如火如荼的今天,无论是运营社交媒体、设计海报、制作视频,还是进行商业品牌推广,寻找高质量的图片素材都是不可或缺的一环。然而,网络上的图片资源纷繁复杂,常常面临版权不清晰、质量参差不齐、收费模式…

上海宠物牙科口碑之选:姚志权医生领衔的专业力量,宠物牙科/猫咪口腔/宠物口腔科/狗狗口腔,宠物牙科医生哪个比较好

在上海,养宠家庭日益增多,宠物的健康问题也愈发受到关注,其中宠物牙科问题尤为突出。据统计,超过 80%的宠物在 3 岁以上会出现不同程度的牙科疾病,如口臭、牙龈发炎、牙齿松动等。这些问题不仅影响宠物的进食和生…

本地部署的物联网平台

物联网平台 - Thinglinks-iot ## &#x1f31f; 项目简介 一个功能完备、高可扩展的物联网平台&#xff0c;提供完整的设备接入、管理和数据处理解决方案。支持多种网络协议&#xff0c;具备强大的消息解析和实时告警能力&#xff0c;帮助企业快速构建物联网应用。 该项目现已…

锅炉厂家加工厂实地考察:看哪些细节能反映真实水平,锅炉厂家/蒸汽锅炉/导热油锅炉,锅炉厂家优质厂家选哪家

在工业热能设备采购决策中,选择一个可靠的锅炉厂家是确保项目长期稳定运行的关键。面对市场上众多的锅炉制造企业,用户往往难以仅凭宣传资料做出判断。为此,本评测团队秉持客观、公正的原则,深入多家主流锅炉制造企…

探讨靠谱的翻堆机实力厂家排名,安阳慧耕能排第几?

在当前有机肥生产领域,企业和农场主在选择翻堆机时,关心的莫过于设备的实用性、成本效益以及厂家的专业能力。安阳慧耕农业科技有限公司作为深耕泥泞场地专用履带式翻堆机的实力厂家,凭借其产品的独特优势和完善的服…

网上订餐|基于ssm+ vue网上订餐系统(源码+数据库+文档)

网上订餐 目录 基于ssm vue网上订餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于ssm vue网上订餐系统 一、前言 博主介绍&#xff1a;✌️大厂码农|毕设布…

探讨盐城思科网络公司百度代运营技术排名,哪家比较靠谱

在数字营销竞争日趋激烈的当下,企业对营销服务的技术水平、创新能力和售前服务质量愈发关注,这也让盐城市思科网络工程有限公司成为众多企业咨询的焦点。盐城市思科网络工程有限公司作为百度授权的正规服务商,深耕盐…

2026 十大商用高清正版素材网站推荐,不会侵权的图片网站推荐

在自媒体创作、电商运营、企业宣传等场景中,商用高清正版素材是内容质量的核心支撑,选错素材不仅影响创作效果,还可能引发版权纠纷。无论是寻找图片、视频还是音乐素材,都需要靠谱的正版平台保驾护航。本文精选 20…

铝合金花箱生产厂售后靠谱的怎么选,有啥建议

随着城市化进程的加速与消费升级,城市景观、商业空间与庭院的精细化美化需求日益增长,铝合金花箱凭借耐腐蚀、重量轻、易定制等优势,逐渐取代传统铁艺、木质花箱,成为户外装饰的主流选择。然而,市场上铝合金花箱生…

飞斯达的商业模式是否可行,PLC产品选购如何选靠谱的

2025年新型电力系统建设加速推进,智能配电设备与电气元件已成为工业生产、商业建筑及新能源场景安全高效运行的核心支撑。无论是防爆防尘的配电箱、具备远程监控的智能配电柜,还是适配多场景的定制化电气模组,优质服…

2026年首月,做得好的二氧化碳公司都在这个排行里,汽化器/制氧机/制氮机/液氮/二氧化碳,二氧化碳源头厂家排行榜单

在全球工业加速向低碳化、绿色化转型的背景下,二氧化碳作为基础工业气体,其生产、应用与服务能力已成为衡量企业综合竞争力的重要指标。当前,二氧化碳行业正经历技术迭代与需求升级的双重驱动:一方面,高纯度二氧化…

微信小程序定制开发公司选型攻略,教你选专业商家(2026更新)(接诉即办小程序、党政小程序、物业小程序开发公司推荐)

一、选择小程序开发服务公司的关键考量因素 1. 核心能力匹配度 需重点核查开发公司在技术架构(如模块化、低代码)、行业经验(垂直领域案例)、生态整合(多平台联动)三方面的适配性。据 2026 年行业观察,具备 AI …

2026年AIGC检测通关攻略:降ai率工具深度测评(含免费降ai率方案)

作为常年与论文为伴的测评者,我曾亲眼目睹学弟用了某款热门工具后,公式乱码、脚注集体消失的惨状。这种绝望感,让我决定自掏腰包,对市面上10款主流降AI工具进行一次全面实测。今天的报告,旨在用真金白银的教训,帮…

吐血推荐MBA必用10款一键生成论文工具

吐血推荐MBA必用10款一键生成论文工具 2026年MBA论文写作工具测评&#xff1a;如何选对工具提升效率 MBA学习过程中&#xff0c;论文写作是一项重要且耗时的任务。面对繁重的课程压力与研究任务&#xff0c;选择一款高效、专业的论文辅助工具显得尤为重要。随着AI技术的不断进步…

【ACM出版 | EI检索】第六届生物信息学与智能计算国际学术研讨会(BIC 2026)

第六届生物信息学与智能计算国际学术研讨会 (BIC 2026)将于2026年3月13-15日在中国东莞举办。【收录稳定:连续五届被EI Compendex和Scopus收录 | 发表高效:平均4.5个月的快速EI检索周期 | 平台权威:由ACM出版社出…

微信小程序定制开发公司如何选择?专业选型指南(律所小程序、寺庙小程序、活动小程序开发公司推荐)

一、选择小程序开发服务公司的关键考量因素 (1)技术与团队实力 核心团队的行业经验、技术储备直接影响开发质量,需关注团队是否具备复杂场景落地能力及模块化开发框架搭建能力,同时查看是否建立符合国家网络安全等…

2026成都集成墙板生产厂家口碑榜:成都华伟木塑98%好评,真实用户实测推荐

2026成都集成墙板生产厂家口碑榜:成都华伟木塑98%好评,真实用户实测推荐当绿色装修成为主流,集成墙板凭借环保、高效、美观的优势,成为家装工装市场的优选材料。在2026年成都集成墙板生产厂家口碑榜中,作为靠谱的…