基础
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}