spring boot mybatis源碼 (一)—— 如何讀取加載配置文件


本文基於spring-boot-starter-parent:1.5.15.RELEASE,mybatis-spring-boot-starter:1.3.2(mybatis:3.4.6)。

spring boot mybatis的配置文件有兩種,application 和 XML。

本文主要目的是理清mybatis加載配置信息的過程。

 

首先,系統啟動

1、MybatisAutoConfiguration 構造

2、MybatisAutoConfiguration.sqlSessionFactory()

  this.properties 的類型是 MybatisProperties,它的內容是 application.yml(或application.properties) 中以 mybatis 開頭的設置

  this.properties.getConfigLocation,即 mybatis XML 配置文件的路徑

  this.properties.getConfiguration,即 application.yml 中 mybatis.configuration的所有內容

  下圖代碼中,當 configLocation 和 configration 都為空時,new Configuration(),然后在133行 factory.setConfiguration()

    在sqlSessionFactory()的最后一步是,factory.getObject(),該方法最終進入SqlSessionFactoryBean.buildSqlSessionFactory() 

3、SqlSessionFactoryBean.buildSqlSessionFactory()

  根據前面的分析,當application.yml 的 mybatis.configurationLocation 和 mybatis.configuration 都為空時,會new Configuration,也就是下圖398行的第一個if

  若mybatis.configLocation 非空 configuration    為空,該地址指向 XML 配置文件,進入405行 else if,new 一個 XMLConfigBuilder;

  若mybatis.configuration    非空 configLocation 為空,進入 408 行 else(因為在sqlSessionFactory()中不會new Configuration,參考前面的分析)。

 

  在 XMLConfigBuilder 的私有構造中86行,首先也會new Configuration,對應上圖中407行 xmlConfigBuilder.getConfiguration()。因此,不論是 application.yml的 mybatis.configuration 還是 XML配置文件,最終都會被解析成 Configuration類。

  4、如何把XML配置文件加入到Configuration中?

  在SqlSessionFactoryBean.buildSqlSessionFactory()中,調用 xmlConfigBuild.parse()

   接着,調用parseConfiguration,解析 XML 中的元素,並添加到Configuration類中。

  下圖中的變量 parser,類型為XPathParser,它是對XPath類的封裝,作用即為解析XML文件內容。

  代碼99行,parser.evalNode("/configuration"),就是在解析 mybatis XML配置文件的 configuration節點,我們知道 mybatis XML配置文件的根節點即 <configuration>。

 完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM