八、【源码】细化XML语句构建器,完善静态SQL解析

源码地址:https://github.com/mybatis/mybatis-3/

仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/08-optimize-xml-parse

细化XML语句构建器,完善静态SQL解析

这一节主要是优化XML解析SQL部分,流程大概为:

1.XMLConfigBuilder解析配置文件,先解析数据源信息,然后再解析SQL信息,拿到mapper元素下的地址

2.XMLMapperBuilder对上面拿到的mapper地址进行处理,根据标签拿到SQL,以select为例,拿到所有select的语句,每一个语句创建一个XMLStatementBuilder处理,处理完成后将这个mapper对应的namespace创建映射器工厂存到configuration中

3.拿到SQL对应的xml,解析id、参数类型、结果类型等信息,从configuration中拿到语言驱动,语言驱动是专门解析sql的,可以进行定制化扩展。

现在用的是XMLScriptBuilder将xml中的SQL构建可执行的SQL,将SQL做一些结点保证,取出SQL包装成StaticTextSqlNode结点放入list中,再包装成MixedSqlNode对象。

创建RawSqlSource对象,这里拿到的SQL是原始SQL,也就是带#{id}的SQL,这里调用SqlSourceBuilder做可执行SQL的构建,这里会替换原始sql中的#{id}的参数,替换成?,也就是预处理的sql,替换掉的参数都封装成一个个ParameterMapping对象中,最后将预处理SQL和替换下来的ParameterMapping列表封装成一个SqlSource。使用SqlSource对象创建MappedStatement对象并存入configuration中

相关推荐
h7ml15 分钟前
企业微信 API 与内部系统集成时的 OAuth2.0 安全上下文传递机制
java·安全·企业微信
Konata1216 分钟前
实现进阶的C/S通信
java·开发语言
初听于你18 分钟前
Java 泛型详解
java·开发语言·windows·java-ee
rainbow688919 分钟前
Java17新特性深度解析
java·开发语言·python
爬山算法19 分钟前
Hibernate(79)如何在ETL流程中使用Hibernate?
java·hibernate·etl
rainbow688926 分钟前
Java实战:5230台物联网设备时序数据处理方案
java
爬山算法26 分钟前
Hibernate(80) 如何在数据迁移中使用Hibernate?
java·oracle·hibernate
Elias不吃糖29 分钟前
Day1 项目启动记录(KnowledgeDock)
java·springboot·登陆·项目启动
belldeep29 分钟前
Java:Tomcat 9, flexmark 0.6 和 mermaid.min.js 10.9 实现 Markdown 中 Mermaid 图表的渲染
java·tomcat·mermaid·flexmark
安全检测中31 分钟前
序列化与反序列化学习
java·开发语言