這里主要討論的是: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中去獲取。