(外だしSQL)selectPage() as manualPaging
"外だしSQLの使い方" を既に読んでいることが前提となります。
概要
外だしSQLで手動ページングによるページング検索 をします。 ここで言う手動とは、ページング絞り込み条件(81件目から100件目など)を明示的に実装することを示します。
会話上では、(外だしSQLの)まにゅあるぺーじんぐのせれくとぺーじ もしくは まにゅあるのせれくとぺーじ や まにゅあるのぺーじんぐ と表現します。
実装方法
Paging用のParameterBeanを用意
ParameterBeanの宣言で、df:pmb extends Paging というように Paging を継承します。 すると、自動生成される ParameterBean が、汎用的なページングの機能を備えた SimplePagingBean を継承します。
e.g. ページング検索用のParameterBeanを生成 @OutsideSql
-- !df:pmb extends Paging!
-- !!AutoDetect!!
select ...
from ...
ページング条件の指定
パラメータコメントを利用して、ページング条件を指定します。これは DBMS によって条件の書き方が変わりますので、DBMSごとの取扱いを必ずご覧下さい。
e.g. MySQLでOutsideSqlのManualPagingのページング条件 @OutsideSql
limit /*$pmb.pageStartIndex*/80, /*$pmb.fetchSize*/20
e.g. PostgreSQLでOutsideSqlのManualPagingのページング条件 @OutsideSql
offset /*$pmb.pageStartIndex*/80 limit /*$pmb.fetchSize*/20
実データ処理IFコメント
総レコード数取得と実データ取得を、IFコメントで分岐させます。
- select句の切り替え
- left outer join ※総レコード数の取得に無関係なもの
- order by
- ページング条件
(SimplePagingBeanを継承した) ParameterBean の isPaging() は、実データ取得のときに true になります。これをIFコメントの中で利用します。
e.g. ManualPagingで実データ処理IFコメントの利用 {PostgreSQL} @OutsideSql
/*IF pmb.isPaging()*/
select ...
-- ELSE select count(*)
/*END*/
from ...
/*IF pmb.isPaging()*/
left outer join ...
/*END*/
where ...
/*IF pmb.isPaging()*/
order by ...
offset /*$pmb.pageStartIndex*/80 limit /*$pmb.fetchSize*/20
/*END*/
メソッドの呼び出し
実装の流れ ※1.1.x (Java8版)
outsideSql() の後、selectPage() を呼び出します。
e.g. 外だしSQLの手動ページング検索の実装手順 (Eclipseでコード補完) @Java
memberBhv.o // .o と打って enter
--
memberBhv.outsideSql().selP // .sP と打って enter
--
memberBhv.outsideSql().selectPage(pmb);
メソッドはオーバーロードで "定型呼び出し形式" と "フリースタイル形式" と二つあります。
実装の流れ ※1.0.x (Java6版)
outsideSql() の後、manualPaging() を呼び出し、その後 selectPage() を呼び出します。
e.g. 外だしSQLの手動ページング検索の実装手順 (Eclipseでコード補完) @Java
memberBhv.o // .o と打って enter
--
memberBhv.outsideSql().m // .m と打って enter
--
memberBhv.outsideSql().manualPaging().sP // .sP と打って enter
--
memberBhv.outsideSql().manualPaging().selectPage(pmb);
メソッドはオーバーロードで "定型呼び出し形式" と "フリースタイル形式" と二つあります。
定型呼び出し形式
TypedParameterBean を引数に受け取ります。(null は許可されません)
CustomizeEntityマーク、および、ページング検索のオプションが指定されたParameterBeanマーク が定義されていることで TypedParameterBean の定型呼び出しが利用できます。 加えて、ManualPaging であることを自動判別、もしくは、明示的指定されたものであることが条件です。 逆に、ManualPaging と判別されない場合は、AutoPaging 用の TypedParameterBean となります。
フリースタイル形式
パス、パラメータ(ParameterBean)、戻り値Entityの型の三つの要素を引数に受け取ります。 それぞれフリースタイル形式の基本仕様と全く同じです。
検索結果の受け取り
検索結果は、TypedParameterBean に関連付けられている Entity 型、もしくは、第三引数で指定した Entity 型の PagingResultBean を戻り値として受け取ります。
カウント検索を後に (CountLater)
enablePagingCountLater() を呼び出すことで、カウント検索を後に実行することができます。
要領はConditionBeanと同じです。
再検索はしない (NonReSelect)
enablePagingCountLater() を呼び出すことで、カウント検索を後に実行することができます。
要領はConditionBeanと同じです。