老規矩,先上案例代碼,我們按照這個案例一步一步的搞定Mybatis源碼。
前面我們已經講了Mybatis是如何解析相關配置檔案的,如果怕迷路,還是建議先看前一篇文章:
Mybatis是如何解析配置檔案的?看完終于明白了
由于很多小夥伴在催,說Mybatis源碼系列好像何時才有下文了,為此老田熬夜寫了這篇。

繼續開撸~~
前面那篇文章已經分析了,這裡的sqlSessionFactory其實就是DefaultSqlSessionFactory。
是以這裡,我們就從DefaultSqlSessionFactory裡的openSession方法開始。
下面我們就來逐個攻破。
事務工廠類型可以配置為JDBC類型或者MANAGED類型。
❝ JdbcTransactionFactory生産JdbcTransaction。 ManagedTransactionFactory生産ManagedTransaction。 ❞
如果配置的JDBC,則會使用Connection對象的commit()、rollback()、close()方法來管理事務。
如果我們配置的是MANAGED,會把事務交給容器來管理,比如JBOSS,Weblogic。因為我們是本地跑的程式,如果配置成MANAGED就會不有任何事務。
但是,如果我們項目中是Spring內建Mybatis,則沒有必要配置事務,因為我們會直接在applicationContext.xml裡配置資料源和事務管理器,進而覆寫Mybatis的配置。
調用configuration的<code>newExecutor</code>方法建立Executor。
此方法分三個步驟。
Executor的基本類型有三種:
SIMPLE為預設類型。
為什麼要讓抽象類BaseExecutor實作Executor接口,然後讓具體實作類繼承抽象類呢?
這就是模闆方法模式的實作。
模闆方法模式就是定義一個算法骨架,并允許子類為一個或者多個步驟提供實作。模闆方法是得子類可以再不改變算法結構的情況下,重新定義算法的某些步驟。
關于模闆方法模式推薦閱讀:
如何快速掌握模闆方法模式
抽象方法是在子類彙總實作的,每種執行器自己實作自己的邏輯,BaseExecutor最終會調用到具體的子類中。
在上面代碼中的第二步
如果<code>cacheEnabled=true</code>,會用裝飾器設計模式對Executor進行裝飾。
緩存裝飾完後,就會執行
這裡會對Executor植入插件邏輯。
比如:分頁插件中就需要把插件植入的Executor
好了,到此,執行器建立的就搞定了。
把前面解析配置檔案建立的Configuration對象和建立的執行器Executor賦給DefaultSqlSession中的屬性。
到這裡,SqlSession(DefaultSqlSession)對象就建立完畢。
本文我們講了如何建立SqlSession的幾個步驟,最後我們獲得一個DefaultSqlSession對象,裡面包含了執行器Executor和配置對象Configuration。Executor是SQL的實際執行對象。Configuration裡儲存着配置檔案内容。
本文源碼分析的整個流程如下圖:
碼字不易,點個贊呗