BoundSql

作者: 风吟空城 | 来源:发表于2020-04-09 11:28 被阅读0次

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

源码

public class BoundSql {

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

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

    private Map<String, Object> 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

      本文链接:https://www.haomeiwen.com/subject/blrqmhtx.html