1、源起
-
是一款優秀的持久層架構,它支援定制化MyBatis
、存儲過程以及進階映射,簡化我們的開發;SQL
- 所有的開源項目都會有自己的頂級域名,我們這裡通路
的中文官網位址;MyBatis
- 中文官網位址
2、主要工作流程
- 初始化解析配置檔案
- 建立會話工廠類
SqlSessionFactory
- 建立會話
SqlSession
- 使用會話操作資料庫
3、 解析配置檔案,參考下篇博文
- 初始化解析配置檔案
4、建立會話工廠類 SqlSessionFactory
SqlSessionFactory
- 每個基于
的應用都是以一個MyBatis
的執行個體為核心的。SqlSessionFactory
的執行個體可以通過SqlSessionFactory
獲得。而SqlSessionFactoryBuilder
則可以從 XML 配置檔案或一個預先配置的 Configuration 執行個體來建構出SqlSessionFactoryBuilder
執行個體。SqlSessionFactory
-
String resource = "mybatis-config.xml";//全局配置檔案路徑 InputStream inputStream = Resources.getResourceAsStream(resource);//讀取xml檔案 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//建構會話工廠類
- 基于以上代碼我們檢視分析源碼
5、源碼分析(以下源碼基于 mybatis-3.5.4
)
mybatis-3.5.4
5.1 SqlSessionFactoryBuilder#build(InputStream)
SqlSessionFactoryBuilder#build(InputStream)
- 首先我們需要用
的SqlSessionFactoryBuilder
方法去建構build
,如下圖:SqlSessionFactory
-
MyBatis源碼分析篇---會話工廠SqlSessionFactory -
方法中,在build
中初始化了new XMLConfigBuilder
,這是至為重要的一個類,之後Configuration
解析的所有配置資訊都會存儲在這個類中;MyBatis
-
MyBatis源碼分析篇---會話工廠SqlSessionFactory
5.2 new Configuration
new Configuration
- 現在我們可以看下在
的時候做了什麼操作;new Configuration
- 我們可以從下面的代碼截圖中看出,其實,他隻是做了部分别名的存儲;
-
MyBatis源碼分析篇---會話工廠SqlSessionFactory
5.3 XMLConfigBuilder#parse
XMLConfigBuilder#parse
- 當我們再
的SqlSessionFactoryBuilder
方法中擷取到了build
之後,調用了其XMLConfigBuilder
方法;parse()
- 而我們看到
方法中調用了parse()
這個方法才是真正執行parseConfiguration(XNode root)
全局配置檔案解析的方法。mybatis
-
MyBatis源碼分析篇---會話工廠SqlSessionFactory - 在
方法中解析了parseConfiguration(XNode root)
、配置節點<properties>
、别名配置節點<settings>
、插件擴充<typeAliases>
、對象工廠節點<plugins>
、環境配置節點<objectFactory>
、類型處理器節點<environments>
、映射器節點<typeHandlers>
等;<mappers>
-
執行配置檔案解析後将配置資訊儲存至parse()
對象中。Configuration
- 其中相對而言最需要我們關注的是:
方法,初始化了org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement
對象,其中儲存了映射檔案等MappedStatement
執行所需的必要資訊;可參考上一篇博文:初始化解析配置檔案SQL
- 代碼運作時序圖
至此:已經擷取到了會話工廠類執行個體
SqlSessionFactory
,我們可以從會話工廠中擷取session會話,進而操作資料庫
結語
每個基于
MyBatis
的應用都是以一個
SqlSessionFactory
的執行個體為核心的,我們擷取到了會話工廠類,就相當于拿到了制作操作資料庫鑰匙的機器,而我們現在隻需要拿着這個機器去制造鑰匙,然後去打開
MyBatis
操作資料庫的大門。
公衆号推薦
微信公衆号:從demo到折騰源碼
微信号:albert_ztym