在MyBatis中有兩種類型的事務管理器(也就是type=“[JDBC|MANAGED]”):
·JDBC – 這個配置就是直接使用了JDBC的提交和回滾設置,它依賴於從數據源得到的連接來管理事務作用域。
·MANAGED – 這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如JEE應用服務器的上下文)。默認情況下它會關閉連接,然而一些容器並不希望這樣,因此需要將closeConnection屬性設置為false來阻止它默認的關閉行為。例如:
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager> |
提示:如果使用spring+MyBatis,則沒有必要配置事務管理器,因為spring模塊會使用自帶的管理器來覆蓋前面的配置。
這兩種事務管理器類型都不需要任何屬性。它們不過是類型別名,換句話說,可以使用TransactionFactory接口的實現類的完全限定名或類型別名代替它們。
public interface TransactionFactory { void setProperties(Properties props); Transaction newTransaction(Connection conn); Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit); } |
任何在XML中配置的屬性在實例化之后將會被傳遞給setProperties()方法。也需要建立一個Transaction接口的實現類,這個接口也很簡單:
public interface Transaction { Connection getConnection() throws SQLException; void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; Integer getTimeout() throws SQLException; } |
使用這兩個接口,可以完全自定義MyBatis對事物的處理。