csv4j を使って思い出したのが、mybatis にも似たような ResultHandler である。
使う機会がないと思っていたのだが、たまにあるかも。。。
膨大な件数を mybatis の selectList の結果としてしまうとメモリ不足になる。
それならば、目的の処理はハンドラでやるべきである
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
:
SqlSession session;
:
session.select("sample.SaMapper.getAll" , new ResultHandler(){
@Override
public void handleResult(ResultContext con){
// ResultContext # getResultCount() で実行中のカウント
// → クエリ結果の行番号
// ResultContext # getResultObject()
// → 1行のデータ, SQLMap で記述した resultType にキャスト可能
// ResultContext # stop() を実行したら次の行を実行しない
}
});