主要是处理结果集,在声明处理器基类中:
this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);
对应configuration里面:
public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler,
ResultHandler resultHandler, BoundSql boundSql) {
ResultSetHandler resultSetHandler = mappedStatement.hasNestedResultMaps() ? new NestedResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql,
rowBounds) : new FastResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds);
resultSetHandler = (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);
return resultSetHandler;
}
resultSetHandler = (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);
表明在结果处理之前可以定义拦截处理,如解密数据处理
根据mappedStatement判断是否是使用嵌套结果处理器还是使用快速处理器,如果是自定义了resultmap,嵌套就是用NestedResultSetHandler了
FastResultSetHandler和NestedResultSetHandler里面就是获取结果集然后根据结果处理类填充进结果集中