spring管理mybatis事务的保证数据库连接唯一的原理

这里主要讨论的是:spring事务管理中如何保证开启事务的connection和mybatis中和数据库交互使用的connection是同一个。

要达到这个目的,主要是通过spring-tx-**.jar包中的TransactionSynchronizationManager这个类来保证的。

Spring 中开启事务的代码(代码太多就不贴完了)

(注:这里的两个参数为datasource和connectionHolder对象,connectionHolder中包含开启事务的connection,bindResource方法就是将connectionHolder以dataSource绑定到当前线程的ThreadLocal保存的map中

mybatis中执行数据库交互时获取connection的代码如下:

 可以看到都是从ThreadLocal中获取的。

总结:所以为了保证connection的唯一,spring中开启事务的时候就将connection保存到ThreadLocal中 ,mybatis需要使用的时候就从ThreadLocal中去获取。

原文地址:https://www.cnblogs.com/guyaoblog/p/11421978.html