Mybatis事務創建和管理


一、什么是事務

事務是指的是一個業務上的最小不可再分單元,通常一個事務對應了一個完整的業務,而一個完整的業務需要批量的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事務,源碼如下:

 

 

 

 ps::當然為了更好的理解Mybatis相關知識,最好是先走一下Mybatis的啟動,關鍵是分析parseConfiguration方法中的EnvironmentElement方法中關於DataSource中相關配置並解析文件裝載到configuration的DataSource中的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM