MyBatis 源碼篇-Transaction

本章簡單介紹一下 MyBatis 的事務模塊,這塊內容比較簡單,主要爲後面介紹 mybatis-spring-1.**.jar(MyBatis 與 Spring 集成)中的事務模塊做準備。

類圖結構

MyBatis 事務模塊的代碼在 transaction 包下:

image.png

根據包的分類,提供了兩種事務實現:jdbc、managed。

我們還是先來看下事務模塊整體的類圖結構:

MyBatis 的事務模塊和事務模塊一樣,使用的也是工廠方法設計模式。那麼它擴展的方式肯定也是提供相應的事務工廠實現類和事務實現類。

簡單描述事務模塊各個類的功能:

  • JdbcTransactionFactory 和 ManagedTransactionFactory 負責創建 JdbcTransaction 和 ManagedTransaction  對象。
  • JdbcTransaction 類中封裝了 DataSource 對象和 Connection 對象,依賴 JDBC Connection 控制事務的提交和回滾。
  • ManagedTransaction 類中同樣封裝了 DataSource 對象和 Connection 對象,但其 commit()、rollback() 方法都是空實現。

在 MyBatis 加載配置文件的時候,會解析配置文件,根據 transactionManager 節點配置的內容生成相應的工廠類對象。

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 源碼篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章