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を利用しています。