MyBatis SQL XML解析

说明

本文仅关注MyBatis SQL XML解析(select/update/insert/delete),不关注MyBatis的其他功能,如果想了解MyBatis的其他功能,可以参考MyBatis官网

解析过程

MyBatis_Mapper_sql_Xml解析

drawio文件下载

环境准备

  • 1.克隆MyBatis源码
1
git clone https://github.com/fuzi1996/mybatis-3.git

使用3.5.7_code_read分支

测试代码介绍

测试代码位置org.apache.ibatis.builder.XmlMapperBuilderTest#selfTest该单元测试主要测试mapper中的selectupdateinsertdelete语句的解析
对应xml文件地址:src\test\java\org\apache\ibatis\builder\SelfTestMapper.xml,可以看到这里面只有一个select语句

解析过程

1.构建XMLMapperBuilder

构建XMLMapperBuilder需要构建MyBatis的全局配置对象Configuration,这里直接new一个Configuration即可

1
2
3
4
5
6
Configuration configuration = new Configuration();
String resource = "org/apache/ibatis/builder/SelfTestMapper.xml";
// configuration.getSqlFragments()是mybatis中已缓存的sql片段
try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
XMLMapperBuilder builder = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
}

2.XMLMapperBuilder解析(parse)

1
2
3
                                            --> XMLIncludeTransformer
XMLMapperBuilder --> XMLStatementBuilder --|
--> LanguageDriver --> XMLScriptBuilder

经过该调用链将xml字符串转为SqlNode对象,并缓存到Configuration