mybatis之MappedStatement getBoundSql
所属分类 mybatis
浏览量 96
org.apache.ibatis.mapping.MappedStatement#getBoundSql 方法是 MyBatis 框架中用于获取绑定 SQL 语句的重要方法。
该方法返回一个 BoundSql 对象,该对象封装了最终的 SQL 语句以及参数绑定信息。
在 MyBatis 的执行流程中,getBoundSql 方法通常用于获取动态 SQL 的最终执行版本。
例如,在执行查询操作时,通过调用 getBoundSql 方法可以获取到最终的 SQL 语句,该语句包含了参数绑定信息。
这在动态 SQL 的解析和执行过程中非常重要
public BoundSql getBoundSql(Object parameterObject) {
BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
List< ParameterMapping> parameterMappings = boundSql.getParameterMappings();
if (parameterMappings == null || parameterMappings.isEmpty()) {
boundSql = new BoundSql(configuration, boundSql.getSql(), parameterMap.getParameterMappings(), parameterObject);
}
// check for nested result maps in parameter mappings (issue #30)
for (ParameterMapping pm : boundSql.getParameterMappings()) {
String rmId = pm.getResultMapId();
if (rmId != null) {
ResultMap rm = configuration.getResultMap(rmId);
if (rm != null) {
hasNestedResultMaps |= rm.hasNestedResultMaps();
}
}
}
return boundSql;
}
public class BoundSql {
private final String sql;
private final List parameterMappings;
private final Object parameterObject;
private final Map additionalParameters;
private final MetaObject metaParameters;
...
}
getBoundSql 返回的 SQL 语句通常包含参数占位符(如 ?),
这是为了防止 SQL 注入攻击,并确保参数能够正确绑定到 SQL 语句中
org.apache.ibatis.mapping.SqlSource 是 MyBatis 框架中的一个接口,用于表示从 XML 映射文件或注解中读取的映射语句内容。
它创建并返回一个 BoundSql 对象,该对象包含了可执行的 SQL 语句和参数信息。
SqlSource 接口的实现类包括 DynamicSqlSource、ProviderSqlSource、RawSqlSource 和 StaticSqlSource。
DynamicSqlSource:用于解析动态 SQL,如 XML 中的 if foreach 等节点。
ProviderSqlSource:用于描述通过注解(如 @SelectProvider)配置的 SQL 资源信息。
RawSqlSource:用于解析静态 SQL,即在程序启动时就确定的 SQL
StaticSqlSource:用于处理多参数的静态 SQL
上一篇
下一篇
JPA常用注解
Springboot 过滤器 拦截器 全局异常处理
jackson 笔记
Mybatis SqlSource 与 BoundSql
小红书视频下载
羽毛球新手学习顺序