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>。

 完。

posted @ 2020-07-20 16:40  leondryu  阅读(1504)  评论(0编辑  收藏  举报