【MyBatis源码】BoundSql分析

153 阅读1分钟

基础

BoundSql是对SQL语句及参数信息的封装,它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的,而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装,具体实现代码如下: 在这里插入图片描述

  /**
   * Mapper配置解析后的SQL语句
   */
  private final String sql;

  /**
   * Mapper参数映射信息
   */
  private final List<ParameterMapping> parameterMappings;
  /**
   * Mapper参数对象
   */
  private final Object parameterObject;
  /**
   * 额外参数信息,包含<bind>标签绑定的参数,内置参数
   */
  private final Map<String, Object> additionalParameters;
  /**
   * 参数对象的MetaObject对象
   */
  private final MetaObject metaParameters;

BoundSql除了封装了Mapper解析后的SQL语句和参数映射信息外,还封装了Mapper调用时传入的参数对象。另外,MyBatis任意一个Mapper都有两个内置的参数,即_parameter和_databaseId。_parameter代表整个参数,包括标签绑定的参数信息,这些参数存放在BoundSql对象的additionalParameters属性中。_databaseId为Mapper配置中通过databaseId属性指定的数据库类型。

示例

 select * from t_user where id = #{id} and name = #{name}

在这里插入图片描述