一、什么是事務
事務是指的是一個業務上的最小不可再分單元,通常一個事務對應了一個完整的業務,而一個完整的業務需要批量的DML語句共同聯合完成。一般,同一個事務中的SQL語句是保存到數據庫中的同一個Transaction對象中,原因是Transaction具有一致性的特征,也就是說事務中如果有任何一條sql語句運行失敗,那么這個事務中所有的SQL語句都會被判定為無效SQL。
二、事務管理方式(事務策略)
Mybatis管理事務是分為兩種方式:
(1)使用JDBC的事務管理機制,就是利用java.sql.Connection對象完成對事務的提交
(2)使用MANAGED的事務管理機制,這種機制mybatis自身不會去實現事務管理,而是讓程序的容器(JBOSS,WebLogic)來實現對事務的管理
在Mybatis的配置文件中可以配置事務管理方式如下:
Mybatis提供了一個事務接口Transaction,以及兩個實現類jdbcTransaction和ManagedTransaction,當spring與Mybatis一起使用時,spring提供了一個實現類SpringManagedTransaction
Transaction接口:提供的抽象方法有獲取數據庫連接getConnection,提交事務commit,回滾事務rollback和關閉連接close,源碼如下:
JdbcTransaction實現類:Transaction的實現類,通過使用jdbc提供的方式來管理事務,通過Connection提供的事務管理方法來進行事務管理,源碼如下:
ManagedTransaction實現類:通過容器來進行事務管理,所有它對事務提交和回滾並不會做任何操作,源碼如下:
SpringManagedTransaction實現類:它其實也是通過使用JDBC來進行事務管理的,當spring的事務管理有效時,不需要操作commit/rollback/close,spring事務管理會自動幫我們完成,源碼如下:

三、Mybatis事務的創建方式源碼分析
Mybatis是基於工廠模式提供了對應的事務類的生成工廠,比如:JdbcTransactionFactory、ManagedTransactionFactory。
注意:當spring和mybatis整合一起的時候,mybatis提供了SpringManagedTransaction實現類,而與之對應的事務工廠類為SpringManagedTransactionFactory
1.分析源碼:以JdbcTransactionFactory創建為原型分析(其他的具體源碼自行分析)
JdbcTransactionFactory:創建JdbcTransaction事務,源碼如下: