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