ResultHandler実行→ List

mybatis の offset , limit を指定する ResultHandler の実行は、膨大な結果になる
クエリ結果を offset , limit 指定範囲の List を取得するのにこんな方法がある

SqlSession session = ....// SqlSession 生成
// 総称型 T を宣言済みで
final List<T> list = new ArrayList<T>();
session.select(sqlid,param,new RowBounds(offset,limit),new ResultHandler(){
   @SuppressWarnings("unchecked")
   @Override
   public void handleResult(ResultContext con){

      list.add((T)con.getResultObject());
   }
}
);


過去、自作した SqlSession インスタンスを隠蔽化、アノテーション
インターセプト・・・
http://blog.zaq.ne.jp/oboe2uran/article/460/

ここの Dao(IBatisDao)に、ResultHandler実行→ List のメソッドを追加すべきか
悩んだ。結局、継承してそこにメソッドを追加することにした。

import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
/**
 * MyBatisDaoPlus  IBatisDao を継承したselect拡張追加
 */

public abstract class MyBatisDaoPlus extends IBatisDao{
   @QueryLimited
   public <T> List<T> selectBounds(String sqlid,int offset,int limit){
      final List<T> list = new ArrayList<T>();
      getSqlSession().select(sqlid,
null,new RowBounds(offset,limit),new ResultHandler(){
         @SuppressWarnings("unchecked")
         @Override
         public void handleResult(ResultContext con){

            list.add((T)con.getResultObject());
         }
      });
      return list;
   }
   @QueryLimited
   public <T> List<T> selectBounds(String sqlid,Object param,int offset,int limit){
      final List<T> list = new ArrayList<T>();
      getSqlSession().select(sqlid,
param,new RowBounds(offset,limit),new ResultHandler(){
         @SuppressWarnings("unchecked")
         @Override
         public void handleResult(ResultContext con){

            list.add((T)con.getResultObject());
         }
      });
      return list;
   }
}