天天看點

MyBatis源碼分析篇---會話工廠SqlSessionFactory

1、源起

  • MyBatis

    是一款優秀的持久層架構,它支援定制化

    SQL

    、存儲過程以及進階映射,簡化我們的開發;
  • 所有的開源項目都會有自己的頂級域名,我們這裡通路

    MyBatis

    的中文官網位址;
  • 中文官網位址

2、主要工作流程

  • 初始化解析配置檔案
  • 建立會話工廠類

    SqlSessionFactory

  • 建立會話

    SqlSession

  • 使用會話操作資料庫

3、 解析配置檔案,參考下篇博文

  • 初始化解析配置檔案

4、建立會話工廠類

SqlSessionFactory

  • 每個基于

    MyBatis

    的應用都是以一個

    SqlSessionFactory

    的執行個體為核心的。

    SqlSessionFactory

    的執行個體可以通過

    SqlSessionFactoryBuilder

    獲得。而

    SqlSessionFactoryBuilder

    則可以從 XML 配置檔案或一個預先配置的 Configuration 執行個體來建構出

    SqlSessionFactory

    執行個體。
  • String resource = "mybatis-config.xml";//全局配置檔案路徑
    InputStream inputStream = Resources.getResourceAsStream(resource);//讀取xml檔案
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//建構會話工廠類
               
  • 基于以上代碼我們檢視分析源碼

5、源碼分析(以下源碼基于

mybatis-3.5.4

5.1

SqlSessionFactoryBuilder#build(InputStream)

  • 首先我們需要用

    SqlSessionFactoryBuilder

    build

    方法去建構

    SqlSessionFactory

    ,如下圖:
  • MyBatis源碼分析篇---會話工廠SqlSessionFactory
  • build

    方法中,在

    new XMLConfigBuilder

    中初始化了

    Configuration

    ,這是至為重要的一個類,之後

    MyBatis

    解析的所有配置資訊都會存儲在這個類中;
  • MyBatis源碼分析篇---會話工廠SqlSessionFactory
5.2

new Configuration

  • 現在我們可以看下在

    new Configuration

    的時候做了什麼操作;
  • 我們可以從下面的代碼截圖中看出,其實,他隻是做了部分别名的存儲;
  • MyBatis源碼分析篇---會話工廠SqlSessionFactory
5.3

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

    執行所需的必要資訊;可參考上一篇博文:初始化解析配置檔案
  • 代碼運作時序圖
MyBatis源碼分析篇---會話工廠SqlSessionFactory

至此:已經擷取到了會話工廠類執行個體

SqlSessionFactory

,我們可以從會話工廠中擷取session會話,進而操作資料庫

結語

​ 每個基于

MyBatis

的應用都是以一個

SqlSessionFactory

的執行個體為核心的,我們擷取到了會話工廠類,就相當于拿到了制作操作資料庫鑰匙的機器,而我們現在隻需要拿着這個機器去制造鑰匙,然後去打開

MyBatis

操作資料庫的大門。

公衆号推薦

微信公衆号:從demo到折騰源碼

微信号:albert_ztym

MyBatis源碼分析篇---會話工廠SqlSessionFactory