sqlsource
sqlsource是mapped statement对象中的一个属性, 是一对一关系, 在创建mapped statement对象时创建,
sqlsource的主要作用就是创建一个sql语句
SqlSource主要有四种实现类, 其主要作用的就是以下三种 :
- RawSqlSource : 存储的是只有“#{}”或者没有标签的纯文本sql信息
- DynamicSqlSource : 存储的是写有“${}”或者具有动态sql标签的sql信息
- StaticSqlSource : 是DynamicSqlSource和RawSqlSource解析为BoundSql的一个中间环节
BoundSql
BoundSql类的作用就是生成我们最终执行的sql语句, 里面包含一些属性
- sql : 执行的sql语句 (包含 ?)
- parameterMappings : 映射关系
- parameterObject : 参数值
DynamicSqlSource
field
configuration : 上下文, 里面包含了各种参数, 方便使用
sqlNode : 对应sql的节点信息, 会在下一篇博客中进行仔细讲解
method
getBoundSql :
- 构建DynamicContext对象, 里边包含一个StringJoiner属性, 遍历sqlNode节点是用来拼接sql
- 42行, 将拼接的sql传入, 将#{}替换成? , 并创建一个StaticSqlSource对象
- 43行, 通过StaticSqlSource对象获取BoundSql对象
RawSqlSource
field
sqlSource : 此属性的类型为StaticSqlSource
method
getBoundSql : 获取BoundSql对象
StaticSqlSource
只包含一个创建BoundSql对象的方法
总结
- RawSqlSource和DynamicSqlSource都是通过StaticSqlSource来创建BoundSql对象的
- RawSqlSource类中就包含一个StaticSqlSource对象, 而DynamicSqlSource每次都需要从新创建StaticSqlSource对象