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