八、【源码】细化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中

相关推荐
zy happy29 分钟前
黑马点评前端Nginx启动失败问题解决记录
java·运维·前端·spring boot·nginx·spring
lxyker34 分钟前
MongoDB大数据量的优化——mongoTemplate.stream()方法使用
java·数据库·mongodb·性能优化·数据库调优
煤灰2421 小时前
简单用c++的类实现的string
java·开发语言·c++
vibag1 小时前
第十六届蓝桥杯复盘
java·算法·蓝桥杯·竞赛
珹洺2 小时前
计算机操作系统(十一)调度器/调度程序,闲逛调度与调度算法的评价指标
android·java·算法
墨着染霜华2 小时前
JAVA8怎么使用9的List.of
java·list
编程、小哥哥2 小时前
Java求职面经分享:Spring Boot到微服务,从理论到实践
java·hadoop·spring boot·微服务·kafka
有梦想的攻城狮3 小时前
spring中的BeanFactoryAware接口详解
java·后端·spring·beanfactory
若汝棋茗3 小时前
C#在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案
java·c#·.net·序列化
通达的K3 小时前
Java的常见算法和Lambda表达式
java·数据结构·算法