mybatis -- sqlsource

本文详细介绍了MyBatis中的SqlSource概念及其四种实现类:RawSqlSource、DynamicSqlSource和StaticSqlSource的工作原理。重点阐述了这些类如何生成最终执行的SQL语句,并解释了BoundSql的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 :

  1. 构建DynamicContext对象, 里边包含一个StringJoiner属性, 遍历sqlNode节点是用来拼接sql
  2. 42行, 将拼接的sql传入, 将#{}替换成? , 并创建一个StaticSqlSource对象
  3. 43行, 通过StaticSqlSource对象获取BoundSql对象

RawSqlSource

在这里插入图片描述

field

sqlSource : 此属性的类型为StaticSqlSource

method

getBoundSql : 获取BoundSql对象

StaticSqlSource

在这里插入图片描述
只包含一个创建BoundSql对象的方法

总结

  1. RawSqlSource和DynamicSqlSource都是通过StaticSqlSource来创建BoundSql对象的
  2. RawSqlSource类中就包含一个StaticSqlSource对象, 而DynamicSqlSource每次都需要从新创建StaticSqlSource对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值