我们已经知道了 Mapper 方法执行的前因,即:获取语句+参数映射(MyBatis 源码分析篇 6:Mapper 方法执行的“前因”)。现在就让我们来看看其“后果”:结果集映射。
参数映射是通过 TypeHandler 实现的,那么同理,结果集映射也应该是通过 TypeHandler 实现。
我们还是按照之前的方式,使用 debug 在入口代码上打断点,步入源码。入口代码为:
List list = mapper.selectByName("Sylvia");
对应的 SQL:
我们接着 MyBatis 源码分析篇 5:Mapper 方法执行之 Executor 一文最后我们找到的 JDBC 代码位置 org.apache.ibatis.executor.statement.PreparedStatementHandler 的 query(...) 方法来看:
@Override
public List query(Statement statement, ResultHandler resultHandler) throws SQLException {
PreparedStatement ps = (PreparedStatement) statement;
ps.execute();
return resultSetHandler. handleResultSets(ps);
}
在执行完 PreparedStatement 的 execute() 后,自然就要进行结果的处理,我们现在就进入最后一行结果处理的代码看看:
org.apache.ibatis.executor.resultset.DefaultResultSetHandler:
@Override
public List