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