Florian的評論讓我朝正確的方向發展,謝謝!我設法讓它工作 - 不是最乾淨的解決方案,但它工作。包含x結果
鑑於java.sql.ResultSet中的RS,可以得到當前一個用下面的代碼:
Object parameterObject = new Object();
RowBounds rb = new RowBounds(0, 1);
MappedStatement ms = sqlSession.getConfiguration().getMappedStatement("myBatisSelectId");
BoundSql boundSql = ms.getBoundSql(parameterObject);
ParameterHandler ph = new DefaultParameterHandler(ms, parameterObject, boundSql);
SimpleExecutor se = new SimpleExecutor(sqlSession.getConfiguration(), null);
DefaultResultHandler resultHandler = new DefaultResultHandler(sqlSession.getConfiguration().getObjectFactory());
DefaultResultSetHandler drsh = new DefaultResultSetHandler(se, ms, ph, resultHandler, boundSql, rb);
drsh.handleResultSets(new FakeStatement(new DelegatingNonClosingResultSet(rs)));
if (resultHandler.getResultList() == null || resultHandler.getResultList().isEmpty()) {
return null;
}
return (T) resultHandler.getResultList().get(0);
請注意,你需要選擇id和參數對象。省略代碼包括FakeStatement以攜帶ResultSet並委派結果集,該結果集委託除了之外的所有方法,因此我們可以在結果集關閉時自行管理。
爲了得到下一個結果一會再打電話rs.next()和做上述所有。當然,許多物品都可以重複使用。
我建議有一個看'ResultSetHandler'接口的'handleResultSets'方法,它的實現類,例如'FastResultSetHandler',這似乎處理結果集。儘管如此,從來沒有更徹底地看過。 –