BoundSql

BoundSql 在 Mybatis 中的作用是保存Sql。这里需要注意的是负责组装Sql不是 BoundSql,BoundSql 只负责保存。

源码

public class BoundSql {

    // ${} 和 #{} 替换为占位符的sql,每个 #{} 替换完之后就是一个占位符 ?
    private String sql;
    
    // 保存 sql 中的 #{},包括其属性、名称等,和替换为占位符 ? 一一对应
    private List parameterMappings;

    //保存用户传入的数据
    private Object parameterObject;

    private Map additionalParameters;

    private MetaObject metaParameters;
    
    ...
    
}

以一个 Sql 语句为例,解释下 BoundSql 各自属性保存的内容。

SELECT * FROM fms_bank_card WHERE USER_ID = #{userId} AND CARD_TYPE = #{cardType} ORDER BY ID DESC;

Sql 查询结果对应的实体类为BankCard,传入的参数也是 BankCard {userId=1,cardType=1},那么BoundSql 各自属性保存内容如下:

  1. sql 属性保存的是
SELECT * FROM fms_bank_card WHERE USER_ID = ? AND CARD_TYPE = ? ORDER BY ID DESC;
  1. parameterMappings,保存的是 #{userId}、#{cardType}信息,以#{userId}为例,保存内容为:
ParameterMapping{property='userId', mode=IN, javaType=java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'
  1. parameterObject 保存的就是用户传入的 BankCard 实例

你可能感兴趣的:(BoundSql)