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功能不會對事務有任何影響,它沒有具體實現,它將事務管理權交給容器來實現。