1、前言
Mybatis 在创建 SqlSessionFactory 时, XMLConfigBuilder 会解析 Mybatis-config.xml 配置文件
2、Mybatis 相关解析器
Mybatis 解析器模块中定义了相关解析器的抽象类 BaseBuilder, 不同的子类负责实现解析不同的功能, 使用了 Builder 设计模式
XMLConfigBuilder 负责解析 mybatis-config.xml 配置文件
XMLMapperBuilder 负责解析业务产生的 xxxMapper.xml
...
3、mybatis-config.xml 解析
XMLConfigBuilder 解析 mybatis-config.xml 内容参考代码 :
XMLConfifigBuilder#parseConfiguration() 方法将 mybatis-config.xml 中定义的标签进行相关解析并填充到 Configuration 对象中
4、xxxMapper.xml 解析
XMLConfifigBuilder#mapperElement() 中解析配置的 mappers 标签, 找到具体的 .xml 文件, 并将其中的 select、insert、update、delete、resultMap 等标签解析为 Java 中的对象信息
具体解析 xxxMapper.xml 的对象为 XMLMapperBuilder, 具体的解析方法为 parse()
到这里就可以对当前问题作出答复了
Mybatis 创建 SqlSessionFactory 会解析 mybatis-config.xml, 然后 解析 configuration 标签下的子标签, 解析 mappers 标签时, 会根据相关配置读取到 .xml 文件, 继而解析 .xml 中各个标签
具体的 select、insert、update、delete 标签定义为 MappedStatement 对象, .xml 文件中的其余标签也会根据不同映射解析为 Java 对象
5、MappedStatement
这里重点说明下 MappedStatement 对象, 一起看一下类中的属性和 SQL 有何关联呢
MappedStatement 对象中 提供的属性与 .xml 文件中定义的 SQL 语句 是能够对应上的, 用来 控制每条 SQL 语句的执行行为