网易工程师心得:3分钟教你实现Spring+Mybatis事务管理

前言

在我们的工程中,一般使用Spring + MyBatis 的模式来实现数据库的事务操作。MyBatis作为DAO层来执行具体的SQL,spring进行事务的管理。那么Mybatis怎么保证执行的SQL是在Spring事务的上下文中?这里的关键就是Spring管理事务和MyBatis执行SQL使用的是同一个Connection。接下来就分析Spring是怎么保证它们使用同一个Connection的。

最近整理的Java架构学习视频和大厂项目底层知识点,需要的同学欢迎私信我【资料】发给你~一起学习进步!

MyBatis获取Connection的过程

在Spring中使用MyBatis,需要在配置文件中使用org.mybatis.spring.SqlSessionFactoryBean来生成SqlSessionFactory对象。

SqlSessionFactoryBean通过以下调用来生成事务管理的对象:

 

 

buildSqlSessionFactory()方法中使用SpringManagedTransactionFactory来初始化事务工厂:

 

SpringManagedTransaction获取连接的过程

 

 

 

可以看到这里的连接是从TransactionSynchronizationManager中获取的。再看TransactionSynchronizationManager的实现,连接信息放在一个ThreadLocal对象中:

 

Spring创建连接

Spring通过org.springframework.jdbc.datasource.DataSourceTransactionManager来进行事务的管理。DataSourceTransactionManager在doBegin方法中开始一个事务时,会通过DataSource获取连接,并将之保存到ThreadLocal对象中:

 

 

在配置文件中,DataSourceTransactionManager和SqlSessionFactoryBean使用同一个DataSource进行初始化。所以在同一个线程中,就能保证spring和mybatis使用同一个连接。

来源:网易工程师-张宇翔

有任何问题欢迎留言交流~


整理总结不易,如果觉得这篇文章有意思的话,欢迎转发、收藏,给我一些鼓励~

有想看的内容或者建议,敬请留言!

最近利用空余时间整理了一些精选Java架构学习视频和大厂项目底层知识点,需要的同学欢迎私信我发给你~一起学习进步!有任何问题也欢迎交流~

Java日记本,每日存档超实用的技术干货学习笔记,每天陪你前进一点点~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值