r; }
[java] view plaincopy
private StatementprepareStatement(StatementHandler handler) throwsSQLException { Statementstmt;
Connectionconnection = transaction.getConnection(); stmt =handler.prepare(connection);
handler.parameterize(stmt); return stmt;
}
[java] view plaincopy
publicParameterHandler newParameterHandler(MappedStatement mappedStatement, ObjectparameterObject, BoundSql boundSql) { ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,parameterObject,boundSql);
parameterHandler = (ParameterHandler) interceptorChain.pluginAll(parameterHandler); returnparameterHandler;
}
[java] view plaincopy
publicvoidsetParameters(PreparedStatement ps) throwsSQLException { ErrorContext.instance().activity("settingparameters").object(mappedStatement.getParameterMap().getId());
List
parameterMappings = boundSql.getParameterMappings(); if(parameterMappings != null) {
MetaObject metaObject = parameterObject == null ? null :configuration.newMetaObject(parameterObject); for (int i = 0; i< parameterMappings.size(); i++) {
ParameterMapping parameterMapping = parameterMappings.get(i); if(parameterMapping.getMode() != ParameterMode.OUT) {
Object value; String propertyName = parameterMapping.getProperty();
PropertyTokenizer prop = newPropertyTokenizer(propertyName); if (parameterObject == null) {
value = null; } elseif (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())){
value = parameterObject; } elseif (boundSql.hasAdditionalParameter(propertyName)){
value = boundSql.getAdditionalParameter(propertyName); } elseif(propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX)
&& boundSql.hasAdditionalParameter(prop.getName())){ value = boundSql.getAdditionalParameter(prop.getName());
if (value != null) { value = configuration.newMetaObject(value).getValue(propertyName.substring(prop.getName().length()));
} } else {
value = metaObject == null ? null :metaObject.getValue(propertyName); }
TypeHandler typeHandler = parameterMapping.getTypeHandler(); if (typeHandler == null) {
thrownew ExecutorException("Therewas no TypeHandler found for parameter " + propertyName + " of statement " + mappedStatement.getId()); }
typeHandler.setParameter(ps, i + 1, value,parameterMapping.getJdbcType()); }
}
}
}
[java] view plaincopy
publicResultSetHandler newResultSetHandler(Executor executor, MappedStatementmappedStatement, RowBoundsrowBounds, ParameterHandler parameterHandler, ResultHandler resultHandler, BoundSqlboundSql) {
ResultSetHandler resultSetHandler =mappedStatement.hasNestedResultMaps() ? newNestedResultSetHandler(executor, mappedStatement, parameterHandler,resultHandler, boundSql, rowBounds): new FastResultSetHandler(executor,mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds); resultSetHandler = (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);
returnresultSetHandler; }
[java] view plaincopy
ResultSetHandler内部一条记录一条记录的处理,在处理每条记录的每一列时会调用TypeHandler转换结果,如下:
protectedbooleanapplyAutomaticMappings(ResultSet rs, List unmappedColumnNames,MetaObject metaObject) throws SQLException { booleanfoundValues = false;
for (StringcolumnName : unmappedColumnNames) { final Stringproperty = m