在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是一個接口,提供了兩個函數分別用來處理普通操作和存儲過程的結果:
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來封裝成對應的對象,最后將封裝的對象返回。