本章簡單介紹一下 MyBatis 的事務模塊,這塊內容比較簡單,主要爲後面介紹 mybatis-spring-1.**.jar(MyBatis 與 Spring 集成)中的事務模塊作準備。spring
類圖結構
MyBatis 事務模塊的代碼在 transaction 包下:設計模式
根據包的分類,提供了兩種事務實現:jdbc、managed。mybatis
咱們仍是先來看下事務模塊總體的類圖結構:架構
MyBatis 的事務模塊和事務模塊同樣,使用的也是工廠方法設計模式。那麼它擴展的方式確定也是提供相應的事務工廠實現類和事務實現類。app
簡單描述事務模塊各個類的功能:ui
- JdbcTransactionFactory 和 ManagedTransactionFactory 負責建立 JdbcTransaction 和 ManagedTransaction 對象。
- JdbcTransaction 類中封裝了 DataSource 對象和 Connection 對象,依賴 JDBC Connection 控制事務的提交和回滾。
- ManagedTransaction 類中一樣封裝了 DataSource 對象和 Connection 對象,但其 commit()、rollback() 方法都是空實現。
在 MyBatis 加載配置文件的時候,會解析配置文件,根據 transactionManager 節點配置的內容生成相應的工廠類對象。spa
XMLConfigBuilder.transactionManagerElement 源碼以下所示:插件
private TransactionFactory transactionManagerElement(XNode context) throws Exception { if (context != null) { // 根據type屬性中配置的類路徑生成對應的事務工廠類 String type = context.getStringAttribute("type"); Properties props = context.getChildrenAsProperties(); TransactionFactory factory = (TransactionFactory) resolveClass(type).newInstance(); factory.setProperties(props); return factory; } throw new BuilderException("Environment declaration requires a TransactionFactory."); }
MyBatis 源碼篇設計