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中去获取。