/**
* An actual SQL String got from an {@link SqlSource} after having processed any
* dynamic content.
* The SQL may have SQL placeholders "?" and an list (ordered) of an parameter
* mappings
* with the additional information for each parameter (at least the property name
* of the input object to read
* the value from).
* </br>
* Can also have additional parameters that are created by the dynamic language (for loops, bind...).
* 从SqlSource得到的处理了动态内容的真正的SQL。这个SQL可以有?占位符和一系列详细的参数信息。
* 也可以是由动态语言(如loops,bind)创建的额外的参数。
*
* @author Clinton Begin
*/publicclassBoundSql{// SQL语句privatefinal String sql;// SQL的参数集合privatefinal List<ParameterMapping> parameterMappings;privatefinal Object parameterObject;privatefinal Map<String, Object> additionalParameters;privatefinal MetaObject metaParameters;publicBoundSql(Configuration configuration, String sql, List<ParameterMapping> parameterMappings,
Object parameterObject){// 构造函数中,成员变量习惯加上this关键字this.sql = sql;this.parameterMappings = parameterMappings;this.parameterObject = parameterObject;this.additionalParameters =newHashMap<String, Object>();this.metaParameters = configuration.newMetaObject(additionalParameters);}public String getSql(){return sql;}public List<ParameterMapping>getParameterMappings(){return parameterMappings;}public Object getParameterObject(){return parameterObject;}publicbooleanhasAdditionalParameter(String name){
String paramName =newPropertyTokenizer(name).getName();return additionalParameters.containsKey(paramName);}publicvoidsetAdditionalParameter(String name, Object value){
metaParameters.setValue(name, value);}public Object getAdditionalParameter(String name){// 成员方法中,成员变量不需要加上this关键字return metaParameters.getValue(name);}}