在PreparedStatementHandler中的query()方法中,用ResultSetHandler来完成结果集的映射。
public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException { PreparedStatement ps = (PreparedStatement) statement; ps.execute(); return resultSetHandler.<E> handleResultSets(ps); }
ResultSetHandler负责处理两件事:
(1)处理Statement执行后产生的结果集,生成结果列表
(2)处理存储过程执行后的输出参数
ResultSetHandler是一个接口,提供了两个函数分别用来处理普通操作和存储过程的结果:
ResultSetHandler是一个接口,提供了两个函数分别用来处理普通操作和存储过程的结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package
org.apache.ibatis.executor.resultset;
import
java.sql.CallableStatement;
import
java.sql.SQLException;
import
java.sql.Statement;
import
java.util.List;
/**
* @author Clinton Begin
*/
public
interface
ResultSetHandler {
<E> List<E> handleResultSets(Statement stmt)
throws
SQLException;
//对普通查询到的结果转换
void
handleOutputParameters(CallableStatement cs)
throws
SQLException;
//调用存储过程返回结果,将结果值放在参数中
}
|
ResultSetHandler的具体实现类是DefaultResultSetHandler,其实现的步骤就是将Statement执行后的结果集,按照Mapper文件中配置的ResultType或ResultMap来封装成对应的对象,最后将封装的对象返回。