首页  

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

小红书视频下载

羽毛球新手学习顺序