十五、【源码】动态Sql

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

仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/15-dynamic-sql

动态Sql

解析动态Sql分为两部分

1.解析XML中Sql的时候,要将其解析成不同的SqlNode节点,但是不进行具体处理,然后根据是否有动态标签创建RawSqlSource还是DynamicSqlSource,有以下几种SqlNode:

  • StaticTextSqlNode:解析纯文本Sql
  • TextSqlNode:解析带有 ${} 或 #{} 的动态 Sql
  • TrimSqlNode:解析标签
  • IfSqlNode:解析标签

2.defaultSqlSession中执行query会调用sqlSource.getBoundSql(parameter)方法,这里会进行解析,首先不管是RawSqlSource还是DynamicSqlSource都会创建动态上下文处理,只是静态的直接获取其中的Sql就行,动态的需要将List节点集合解析并组装成一个完整的Sql然后再获取,值得注意的是TextSqlNode会在这一步处理掉${},后面的处理都一样了,使用sqlSourceParser将Sql的#{}替换成?,生成JDBC 可执行的 SQL 语句,再封装成一个BoundSql对象

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值