S2Daoでページャー
S2Daoでページャー機能をインターセプターとラッパーで実現してみました。
AOPとThreadLocalで透過的にページング処理ができます。
プロジェクトで了解が出ましたら、ぜひ公開したいと思っています。
・ページャの検索条件を保持するPagerConditionインターフェイスを作成
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
PagerCondition
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-offset
-limit
-count
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
countは結果セットの総件数がセットされるので、戻り値としての役割もあります。
検索条件はこのインターフェイス+個々の検索条件のプロパティを持ちます。
・S2DaoInterceptorをラップするPagerS2DaoInterceptorWrapper作成
・ResultSetFactoryをラップするPagerResultSetFactoryを作成
PagerResultSetFactoryの中で、ページャ対応のメソッド呼び出しなら、
ResultSetをラップしたPagerResultSetWapperを作成
・PagerResultSetWapperはResultSetHandlerからnext()メソッドを呼び出されますが、
ここではResultSet#nextの責務を放棄して、
PagerCondition(offset,limit)に応じて結果を返します。
結果的にResultSetHandlerをだます動作になります。
また最後に総件数がPagerConditionにセットされます。
・PagerS2DaoInterceptorWrapper、PagerResultSetWapper、PagerConditionという
レイヤーが異なるオブジェクト同士を結びつけるために、ThreadLocalを利用しています。