MyBatis事務管理的兩種方式
阿新 • • 發佈:2020-07-21
1、什麼是事務
事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。事務可大可小,在關係資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程式。
2、MyBatis事務管理策略
MyBatis的事務管理分為兩種形式:
(1)使用JDBC的事務管理機制。
這種機制就是利用java.sql.Connection物件完成對事務的提交
(2)使用MANAGED的事務管理機制。
這種機制mybatis自身不會去實現事務管理,而是讓程式的Web容器或者Spring容器來實現對事務的管理。
3、MyBatis中Transaction介面
mybatis支援的兩種事務型別管理器,Transactions介面中對兩種事務管理方式進行行為約束。具體介紹看下面程式碼。
- public interface Transaction
- {
-
- //JDBC中事務手動管理,需要依靠Connection物件,此方法可以取得Connection物件。
- Connection getConnection() throws SQLException;
-
- //設定在什麼情況下執行commit()命令
- void commit() throws SQLException;
-
- //設定在什麼情況下執行rollback()命令
- void rollback() throws SQLException;
-
- //業務完畢後,處理Connection物件,一般有兩種形式,將這個Connection物件銷燬或者將Connection返回資料庫連線池中。
- void close() throws SQLException;
-
- //Connection向資料庫索要一個Transaction物件時的最大等待時間。
- Integer getTimeout() throws SQLException;
-
- }
4、Transaction的介面實現類
Transaction介面中有兩個實現類:JdbcTransaction和ManagedTransaction。
(1)JdbcTransaction
JdbcTransaction直接使用JDBC的提交和回滾事務管理機制。它依賴與從dataSource中取得的連線connection來管理transaction的作用域,connection物件的獲取被延遲到呼叫getConnection()方法。如果autoCommit設定為on,開啟狀態的話,它會忽略commit和rollback。
(2)ManagedTransaction
檢視這個類,可知其中的commit方法和rollback方法沒有具體實現。ManagedTransaction是讓容器來管理事務Transaction的整個生命週期,使用ManagedTransaction的commit和rollback功能不會對事務有任何影響,它沒有具體實現,它將事務管理權交給容器來實現。
http://www.mybatis.cn/archives/763.html