11 鸟瞰 MyBatis 初始化,把握 MyBatis 启动流程脉络(下)
在上一讲,我们深入分析了MyBatis 初始化过程中对 mybatis-config.xml 全局配置文件的解析,详细介绍了其中每个标签的解析流程以及涉及的经典设计模式——构造者模式。这一讲我们就紧接着上一讲的内容,继续介绍 MyBatis 初始化流程,重点介绍Mapper.xml 配置文件的解析以及 SQL 语句的处理逻辑。
Mapper.xml 映射文件解析全流程
在上一讲分析 mybatis-config.xml 配置文件解析流程的时候我们看到,在 mybatis-config.xml 配置文件中可以定义多个
标签指定 Mapper 配置文件的地址,**MyBatis 会为每个 Mapper.xml 映射文件创建一个 XMLMapperBuilder 实例完成解析**。
与 XMLConfigBuilder 类似,XMLMapperBuilder也是具体构造者的角色,继承了 BaseBuilder 这个抽象类,解析 Mapper.xml 映射文件的入口是 XMLMapperBuilder.parse() 方法,其核心步骤如下:
* 执行 configurationElement() 方法解析整个Mapper.xml 映射文件的内容;
* 获取当前 Mapper.xml 映射文件指定的 Mapper 接口,并进行注册;
* 处理 configurationElement() 方法中解析失败的
标签;
* 处理 configurationElement() 方法中解析失败的
标签;
* 处理 configurationElement() 方法中解析失败的SQL 语句标签。
可以清晰地看到,**configurationElement() 方法才是真正解析 Mapper.xml 映射文件的地方**,其中定义了处理 Mapper.xml 映射文件的核心流程:
* 获取
标签中的 namespace 属性,同时会进行多种边界检查;
* 解析
标签;
* 解析
标签;
* 解析
标签;
* 解析
标签;
* 解析