This is a cache of http://dbflute.seasar.org/ja/manual/function/ormapper/outsidesql/select/selectpagemanual.html. It is a snapshot of the page at 2024-11-01T00:30:00.040+0000.
(外だしSQL)selectPage() as manualPaging | DBFlute

(外だし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 - ページング検索のオプション

フリースタイル形式

パス、パラメータ(ParameterBean)、戻り値Entityの型の三つの要素を引数に受け取ります。 それぞれフリースタイル形式の基本仕様と全く同じです。

外だしSQLの使い方 - フリースタイル基本仕様

検索結果の受け取り

検索結果は、TypedParameterBean に関連付けられている Entity 型、もしくは、第三引数で指定した Entity 型の PagingResultBean を戻り値として受け取ります。

カウント検索を後に (CountLater)

enablePagingCountLater() を呼び出すことで、カウント検索を後に実行することができます。

要領はConditionBeanと同じです。

再検索はしない (NonReSelect)

enablePagingCountLater() を呼び出すことで、カウント検索を後に実行することができます。

要領はConditionBeanと同じです。