更新時間:2021-07-06 16:07:00 來源:動力節(jié)點 瀏覽1199次
1.什么是事務(wù)
事務(wù)是指的是一個業(yè)務(wù)上的最小不可再分單元,通常一個事務(wù)對應(yīng)了一個完整的業(yè)務(wù),而一個完整的業(yè)務(wù)需要批量的DML語句共同聯(lián)合完成。一般,同一個事務(wù)中的SQL語句是保存到數(shù)據(jù)庫中的同一個Transaction對象中,原因是Transaction具有一致性的特征,也就是說事務(wù)中如果有任何一條sql語句運行失敗,那么這個事務(wù)中所有的SQL語句都會被判定為無效SQL。
2.事務(wù)管理方式(事務(wù)策略)
Mybatis管理事務(wù)是分為兩種方式:
(1)使用JDBC的事務(wù)管理機(jī)制,就是利用java.sql.Connection對象完成對事務(wù)的提交
(2)使用MANAGED的事務(wù)管理機(jī)制,這種機(jī)制mybatis自身不會去實現(xiàn)事務(wù)管理,而是讓程序的容器(JBOSS,WebLogic)來實現(xiàn)對事務(wù)的管理
在Mybatis的配置文件中可以配置事務(wù)管理方式如下:
Mybatis提供了一個事務(wù)接口Transaction,以及兩個實現(xiàn)類jdbcTransaction和ManagedTransaction,當(dāng)spring與Mybatis一起使用時,spring提供了一個實現(xiàn)類SpringManagedTransaction
Transaction接口:提供的抽象方法有獲取數(shù)據(jù)庫連接getConnection,提交事務(wù)commit,回滾事務(wù)rollback和關(guān)閉連接close,源碼如下:
JdbcTransaction實現(xiàn)類:Transaction的實現(xiàn)類,通過使用jdbc提供的方式來管理事務(wù),通過Connection提供的事務(wù)管理方法來進(jìn)行事務(wù)管理,源碼如下:
ManagedTransaction實現(xiàn)類:通過容器來進(jìn)行事務(wù)管理,所有它對事務(wù)提交和回滾并不會做任何操作,源碼如下:
SpringManagedTransaction實現(xiàn)類:它其實也是通過使用JDBC來進(jìn)行事務(wù)管理的,當(dāng)spring的事務(wù)管理有效時,不需要操作commit/rollback/close,spring事務(wù)管理會自動幫我們完成,源碼如下:
三、Mybatis事務(wù)的創(chuàng)建方式源碼分析
Mybatis是基于工廠模式提供了對應(yīng)的事務(wù)類的生成工廠,比如:JdbcTransactionFactory、ManagedTransactionFactory。
注意:當(dāng)spring和mybatis整合一起的時候,mybatis提供了SpringManagedTransaction實現(xiàn)類,而與之對應(yīng)的事務(wù)工廠類為SpringManagedTransactionFactory
1.分析源碼:以JdbcTransactionFactory創(chuàng)建為原型分析(其他的具體源碼自行分析)
JdbcTransactionFactory:創(chuàng)建JdbcTransaction事務(wù),源碼如下:
當(dāng)然為了更好的理解Mybatis相關(guān)知識,最好是先走一下Mybatis的啟動,關(guān)鍵是分析parseConfiguration方法中的EnvironmentElement方法中關(guān)于DataSource中相關(guān)配置并解析文件裝載到configuration的DataSource中的過程。
以上就是動力節(jié)點小編介紹的"MyBatis事務(wù)創(chuàng)建和管理",希望對大家有幫助,想了解更多可查看Mybatis基礎(chǔ)教程,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。