1. 程式人生 > 實用技巧 >MyBatis事務管理的兩種方式

MyBatis事務管理的兩種方式

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