(外だしSQL)selectPage() as autoPaging

"外だしSQLの使い方" を既に読んでいることが前提となります。

概要

外だしSQLで自動ページングによるページング検索 をします。ここでいう自動とは、ページング条件(81件目から100件目まで)をSQLの記述しないでも絞り込まれるようにすることを示します。

会話上では、(外だしSQLの)おーとぺーじんぐのせれくとぺーじ もしくは おーとのせれくとぺーじおーとのぺーじんぐ と表現します。

ページング条件が自動(オート)

自動ページングの "自動の対象" は、例えば、81 件目から 100 件目までを検索するというような "ページング条件" です。"select句の切り替え" や "不要な結合の除去"、"不要な order-by 指定" をは手動ページングと同じく必要です。

文字列操作で頑張ればできなくなさそうに思えますが、SQLの記述は自由であり、無理矢理な文字列操作で下手な誤動作が起きない可能性を抑えるのは厳しいでしょう。 DBFluteでは、(できるだけ)書いた通りのSQLが実行される、というのをポリシーとし、そういったトラブりそうな要因はできるだけ外した方が良いだろうと考えてこのようにしています。

実装方法

実装の流れ ※1.1.x (Java8版)

手動ページングでなければ自動ページングになります。つまり、以下の条件です。

  • "df:pmb extends Paging" で、SQLでページング条件を記述しなければ
e.g. AutoPagingで実データ処理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 ...
 /*END*/
e.g. 外だしSQLの自動ページング検索の実装手順 (Eclipseでコード補完) @Java
memberBhv.o // .o と打って enter
--
memberBhv.outsideSql().selP // .selP と打って enter
--
memberBhv.outsideSql().selectPage(pmb);

実装の流れ ※1.0.x (Java6版)

手順は 手動ページングとほとんど同じ で、途中で呼び出すメソッドが autoPaging() となります。また、SQLでページング条件を記述する必要はありません

e.g. 外だしSQLの自動ページング検索の実装手順 (Eclipseでコード補完) @Java
memberBhv.o // .o と打って enter
--
memberBhv.outsideSql().a // .a と打って enter
--
memberBhv.outsideSql().autoPaging().sP // .sP と打って enter
--
memberBhv.outsideSql().autoPaging().selectPage(path, pmb, entityType);