[Seasar-user:18735] Re: DBFluteにおけるPagingの件数取得について
kubo
[E-MAIL ADDRESS DELETED]
2009年 10月 22日 (木) 22:49:59 JST
久保(jflute)です。
まずはbasicInfoMap.dfpropにて、
「isAvailableHotDeploy = true」
と設定されているかご確認下さい。
2009/10/22 <[E-MAIL ADDRESS DELETED]>:
> 久保さま
>
>
> お世話になっております.松原です.
>
> 大変申し訳ございませんが,以下の手順でDBFluteを実行させた結果,
> HotDeployで正常に生成できないようになってしまいました.
> 原因など心当たりがありましたら,ご教示頂けないでしょう?
>
>
> 【変更前環境】
> ・DBFlute:0.9.4
> ・依存Jar:aopalliance-1.0.jar
> commons-logging-1.1.jar
> dbflute-runtime.jar
> dbflute.jar
> derby-10.1.2.1.jar
> geronimo-ejb_2.1_spec-1.0.jar
> geronimo-j2ee_1.4_spec-1.0.jar
> geronimo-jta_1.1_spec-1.0-tsr.jar
> geronimo-jta_1.1_spec-1.0.jar
> h2-1.0.20061103.jar
> hsqldb-1.8.0.1.jar
> javassist-3.4.ga.jar
> junit-3.8.2.jar
> junit-addons-1.4.jar
> log4j-1.2.13.jar
> ognl-2.6.9-patch-20070908.jar
> ojdbc14.jar
> poi-3.0-FINAL.jar
> portlet-api-1.0.jar
> s2-dao-1.0.50.jar
> s2-extension-2.4.34.jar
> s2-framework-2.4.34.jar
> uow_api-6.jar
>
> 【変更後環境】
> ・DBFlute:0.9.5.5
> ・依存Jar:aopalliance-1.0.jar
> commons-collections-2.1.jar
> commons-lang-1.0.1.jar
> commons-logging-1.1.jar
> dbflute-runtime-0.9.6-BETA2.jar
> dbflute.jar
> derby-10.5.1.1.jar
> geronimo-ejb_2.1_spec-1.0.jar
> geronimo-j2ee_1.4_spec-1.0.jar
> geronimo-jta_1.1_spec-1.0-tsr.jar
> geronimo-jta_1.1_spec-1.0.jar
> h2-1.1.118.jar
> hsqldb-1.8.0.1.jar
> javassist-3.4.ga.jar
> junit-3.8.2.jar
> junit-addons-1.4.jar
> log4j-1.2.13.jar
> mysql-connector-java-5.1.8-bin.jar
> ognl-2.6.9-patch-20070908.jar
> ojdbc14.jar
> poi-3.2-FINAL-20081019.jar
> portlet-api-1.0.jar
> postgresql-8.3-603.jdbc3.jar
> s2-dao-1.0.50.jar
> s2-extension-2.4.34.jar
> s2-framework-2.4.34.jar
> uow_api-6.jar
> velocity-1.3.1.jar
>
> 【変更内容】
> (1)DBFlute0.9.4 から0.9.5.5への移行で特に意識する点はないと
> 思いましたので,DBFlute0.9.4のHotDeploy対応環境から以下の
> フォルダを更新しました.
>
> ・mydbflute
> DBFlute0.9.4 ⇒ DBFlute0.9.5
>
> (2)mydbfluteのテンプレートをHotDeploy対応に修正しようと思い
> ましたが、既に同一内容となっていましたので,以下のファイル
> の更新はしませんでした.(一応,上書きでも確認)
>
> /templates/om/java/allcommon/container/seasar/hotdeploy/CreatorDicon.vm
> /templates/om/java/allcommon/container/seasar/hotdeploy/CustomizerDicon.vm
>
> 結果,mydbfluteのみ更新し,DBFluteを実行すると,以下の結果となりました.
>
> ・dbflute-xxx.dicon:全コンポーネントの定義が生成しまう(The components of Behavior以降が展開)
> ・aaa.bbb.ccc.dbflute.allcommon.s2container.BehaviorCreator.javaが生成されない
>
>
> こちらの移行手順ミスとは思いましたが,前回確認させて頂いたHotDeployの手順から
> 問題点が分かりませんでしたので,ご相談させて頂きました.
>
>
> 申し訳ございませんが,宜しくお願い致します.
>
>
> 以上です.
>
>>久保さま
>>
>> お世話になっております.松原です.
>>
>>大変有難うございます.まずは,BETA2で確認してみます.
>>
>>
>>お忙しいところの対応,誠に有難うございました.
>>
>>
>>以上です.
>>
>>>久保(jflute)@りんかい線です。
>>>
>>>すいません、チェックのタイミングを間違って、
>>>実データ後にチェックしちゃってました。
>>>件数取得の後で実データ取得の前のタイミングで
>>>チェックするように直しました。
>>>(BETA2を上書きしています)
>>>
>>>2009/10/21 kubo <[E-MAIL ADDRESS DELETED]>:
>>>> 久保(jflute)です。
>>>>
>>>> ちょっと出かける直前で取り急ぎということで、
>>>> 「DBFluteランタイム-0.9.6-BETA2」にて反映しました。
>>>> (Mavenリポジトリにアップしています)
>>>> DBFluteモジュールは0.9.5.5のままOKです。
>>>> もしよければ、お試し頂けると助かります。
>>>>
>>>> 2009/10/21 <[E-MAIL ADDRESS DELETED]>:
>>>>> 久保さま
>>>>>
>>>>> お世話になっております.松原です.
>>>>>
>>>>>
>>>>> 度々申し訳ございません.こちらで検討したところ,
>>>>> 久保さまのご提示案が一番効率的と分かりました.
>>>>> 先程のメール大変申し訳ございません.破棄して下さい.
>>>>>
>>>>> こちらの認識は以下の通りです.
>>>>>
>>>>> // 先ずは,100件をセット
>>>>> pmb.checkSafetyResult(100);
>>>>>
>>>>> try {
>>>>> xxxBhv.outsideSql().manualPaging().selectPage(...);
>>>>> // 100件以内のなで,※ 結果, Count(*)とデータ取得の2回のSQLが実行
>>>>>
>>>>> } catch (DangerousResultSizeException e) {
>>>>> // エラーとなったので, ※ Count(*)の1回のみが実行されている
>>>>>
>>>>> // 以下の取得件数からワーニングを切替える
>>>>> メッセージ出力
>>>>>
>>>>> // ユーザが表示とした場合
>>>>> if (e.getActualResultSize() > 10000) {
>>>>> // 999件以内
>>>>> xxxBhv.outsideSql().selectList();
>>>>>
>>>>> // 結果,※ Count(*)×2回とデータ取得の1回のSQLが実行
>>>>> } else {
>>>>> // 10000件以上
>>>>> pmb.fetchFirst(10000);
>>>>> xxxBhv.outsideSql().autoPaging().selectPage
>>>>>
>>>>> // 結果,※ Count(*)×2回とデータ取得の1回のSQLが実行
>>>>>
>>>>> }
>>>>>
>>>>> という結果となり,一番効率的であり(DB検索),データ転送量が少ない方式であると
>>>>> 分かりました.
>>>>>
>>>>>
>>>>> 不躾ですが,重ねて,ご提示機能の検討をお願い致します.
>>>>>
>>>>>
>>>>>
>>>>> 以上です.宜しくお願い致します.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>久保さま
>>>>>>
>>>>>> お世話になっております.松原です.
>>>>>>
>>>>>>ちょっと,今回のこちらの要件が複雑となっており,
>>>>>>
>>>>>> (1)対象件数が 100件以内 ⇒ そのまま表示
>>>>>> (2)対象件数が 101件以上 かつ 9,999件以内 ⇒ ワーニング①
>>>>>> (3)対象件数が 10,000件以上 ⇒ ワーニング②
>>>>>>
>>>>>> ワーニング①では,取得件数をユーザに通知し,表示を選んだ場合,そのまま取得データを表示
>>>>>> ワーニング②では,取得件数をユーザに通知し,表示を選んだ場合,先頭10,000件のみを表示
>>>>>>
>>>>>>以上のようなことから,ご教示頂いた方式でもできなくともないですが,ワーニング①を実装するときに
>>>>>>正常ケースでgetAllRecordCount()の結果から判定するので,ちょっと無駄なデータを取得し
>>>>>>いるようですね.
>>>>>>
>>>>>>ご提示して頂いた機能は,非常に使い勝手が良さそうなので,本処理向きではありませんが,
>>>>>>追加して頂けるのであれば,大変有難い機能です.
>>>>>>ワーニング①がない処理の方が一般的と思いますし,本システムでも使用することになるかもしれません.
>>>>>>
>>>>>>もし,可能であれば,ご提示機能の検討をお願いしたいです.
>>>>>>
>>>>>>
>>>>>>因みに
>>>>>>> Integer actualSize = e.getActualResultSize(); // これ必要かな???
>>>>>>は,私にとって,とても必要と思いました.
>>>>>>
>>>>>>以上です.
>>>>>>
>>>>>>>久保(jflute)です。
>>>>>>>
>>>>>>>松原さん、一覧表示の事前件数チェックということですが、
>>>>>>>もし、このような機能があったら要件は満たせますでしょう?
>>>>>>>
>>>>>>>XxxPmb pmb = new XxxPmb();
>>>>>>>pmb.checkSafetyResult(10000); // 一万件超えちゃダメ
>>>>>>>try {
>>>>>>> xxxBhv.outsideSql().manualPaging().selectPage(...);
>>>>>>>} catch (DangerousResultSizeException e) {
>>>>>>> int safetySize = e.getSafetyMaxResultSize();
>>>>>>> Integer actualSize = e.getActualResultSize(); // これ必要かな???
>>>>>>> // 一万件超えた時の処理
>>>>>>>}
>>>>>>>※無論、実現するなら同様の機能をConditionBeanにも
>>>>>>>
>>>>>>>
>>>>>>>既にConditionBeanでは似たような発想の機能があって、
>>>>>>>それをページングの件数取得にも反映させるのは筋が
>>>>>>>通ってるかなと思いまして。
>>>>>>>
>>>>>>>cb.checkSafetyResult(100);
>>>>>>>xxxBhv.selectList(cb); // 100件超えたら例外
>>>>>>>
>>>>>>>2009/10/20 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>> 久保さま
>>>>>>>>
>>>>>>>> お世話になっております.松原です.
>>>>>>>>
>>>>>>>>
>>>>>>>>>return super.isPaging() && !isCountOnly();
>>>>>>>> ⇒が正解ですね.タイプミスです.
>>>>>>>>
>>>>>>>>>テンプレートの修正が、アップグレード時にロストしないように
>>>>>>>>>DBFluteクライアント配下で管理して、sql2entity.bat(sh)などで、
>>>>>>>>>DBFluteモジュール内に自動的にコピーすることをお奨めします。
>>>>>>>> ⇒その通りですね.こちらの修正したVMファイルは,バッチでコピーするようにします.
>>>>>>>>
>>>>>>>>>ちなみに松原さんの環境では、この件が
>>>>>>>>>(テンプレートを直すまでやるからには)
>>>>>>>>>局所的じゃないってところでしょうか?
>>>>>>>> ⇒今回は外だしSQL(Select句)がデータ構造から多少多くなっていることと,
>>>>>>>> 一覧表示件数の上限があり,事前件数取得が必須となっています.
>>>>>>>> また,今回の件をDBFulteでサポートして頂けると私的には有難いですが,
>>>>>>>> あまり,スタンダードな使用方法ではないと思いますので,久保さまの判断に
>>>>>>>> お任せしたいです.
>>>>>>>>
>>>>>>>>
>>>>>>>> 以上です.大変有難うございました.
>>>>>>>>
>>>>>>>>>久保(jflute)です。
>>>>>>>>>
>>>>>>>>>isPaging()のオーバーライド内の判定ですが、
>>>>>>>>>return super.isPaging() && isCountOnly();
>>>>>>>>>は
>>>>>>>>>return super.isPaging() && !isCountOnly();
>>>>>>>>>かと(countOnlyじゃなければtrue)
>>>>>>>>>あとテンプレートの修正内容は特に問題なさそうに思えます。
>>>>>>>>>テンプレートの修正が、アップグレード時にロストしないように
>>>>>>>>>DBFluteクライアント配下で管理して、sql2entity.bat(sh)などで、
>>>>>>>>>DBFluteモジュール内に自動的にコピーすることをお奨めします。
>>>>>>>>>
>>>>>>>>>ちなみに松原さんの環境では、この件が
>>>>>>>>>(テンプレートを直すまでやるからには)
>>>>>>>>>局所的じゃないってところでしょうか?
>>>>>>>>>外だしSQLのページング検索のSQLファイルを使って
>>>>>>>>>件数取得だけを単独で実行する業務がたくさんある
>>>>>>>>>ということでしょうか?
>>>>>>>>>(内容によってはやはりDBFlute側でサポートした方がいいかなと)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>2009/10/20 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>> 久保さま
>>>>>>>>>>
>>>>>>>>>> お世話になっております.松原です.
>>>>>>>>>>
>>>>>>>>>> 度々すみません.
>>>>>>>>>>
>>>>>>>>>> 今回の実装を以下のように考えてみなしたが,
>>>>>>>>>> 問題ないでしょうか?
>>>>>>>>>>
>>>>>>>>>> ・DBFluteの自動作成バッチ後に対象クラスの拡張は,再作成のたびに必要となるため,
>>>>>>>>>> DBFluteの自動作成の中に組み込めないか,以下の「BsParameterBean.vm」に
>>>>>>>>>> 今回の処理を記述してみました.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 「BsParameterBean.vm」に「Customize Attribute」と「Customize Accessor」を追加.
>>>>>>>>>>
>>>>>>>>>> ***********************************************************
>>>>>>>>>> ${database.allClassCopyright}package ${glPackageBaseParameterBean};
>>>>>>>>>> #set ($myClassName = "${myBaseParameterBeanClassName}")
>>>>>>>>>>
>>>>>>>>>> #if ($database.isPmbMetaDataForProcedure($pmbClassName))
>>>>>>>>>>
>>>>>>>>>> (省略)
>>>>>>>>>> // ===================================================================================
>>>>>>>>>> // Customize Attribute
>>>>>>>>>> // ====================
>>>>>>>>>> protected boolean countOnly;
>>>>>>>>>>
>>>>>>>>>> // ===================================================================================
>>>>>>>>>> // Attribute
>>>>>>>>>> // =========
>>>>>>>>>>
>>>>>>>>>> (省略)
>>>>>>>>>>
>>>>>>>>>> // ===================================================================================
>>>>>>>>>> // Customize Accessor
>>>>>>>>>> // ==================
>>>>>>>>>> #if ($database.getPmbMetaDataSuperClassDefinition($pmbClassName).indexOf("SimplePagingBean") > 0)
>>>>>>>>>> public boolean isCountOnly() {
>>>>>>>>>> return countOnly;
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> public void setCountOnly(boolean countOnly) {
>>>>>>>>>> this.countOnly = countOnly;
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> @Override
>>>>>>>>>> public boolean isPaging() {
>>>>>>>>>> return super.isPaging() && isCountOnly();
>>>>>>>>>> }
>>>>>>>>>> #end
>>>>>>>>>>
>>>>>>>>>> // ===================================================================================
>>>>>>>>>> // Accessor
>>>>>>>>>> // ========
>>>>>>>>>>
>>>>>>>>>> ***********************************************************
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 見辛くなりましたが,DBFluteの自動作成バッチに組み込む場合,上記内容で問題ないか
>>>>>>>>>> ご教示頂ければ幸いです.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 以上です.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>久保です。
>>>>>>>>>>>
>>>>>>>>>>>そうですね、現状では、松原さんの考えの通り、
>>>>>>>>>>><B>でisPaging()をオーバーライドするのが良いかと思います。
>>>>>>>>>>>
>>>>>>>>>>>「ページング検索PmbのisPaging()を(再利用のために)falseにする方法」
>>>>>>>>>>>というテーマで、新ドキュメントに反映したいと思います。
>>>>>>>>>>>フィードバックありがとうございました。
>>>>>>>>>>>
>>>>>>>>>>>#
>>>>>>>>>>># pmb.disablePaging()みたいなインターフェースを作って
>>>>>>>>>>># しまおうかとも思いましたが、状況が局所的であることと、
>>>>>>>>>>># よく分かってる人じゃないと理解しづらい機能になるので、
>>>>>>>>>>># やはり、「独自プロパティ&isPaging()をオーバーライド」
>>>>>>>>>>># という方式を正式なものにしようかと思います。
>>>>>>>>>>>#
>>>>>>>>>>>
>>>>>>>>>>>2009/10/20 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>> 久保さま
>>>>>>>>>>>>
>>>>>>>>>>>> お世話になっております.松原です.
>>>>>>>>>>>>
>>>>>>>>>>>> ご返信頂いた内容で全く問題ありません.
>>>>>>>>>>>>
>>>>>>>>>>>> やはり,現状のDBFluteのParameterBeanでは指定することが
>>>>>>>>>>>> できないですね.
>>>>>>>>>>>> しかも,拡張の仕方までご教示頂けて,大変有難うございます。
>>>>>>>>>>>>
>>>>>>>>>>>> 現状,こちらで最適とさせて頂いたのは,<B>のisPaging()をオーバーライドして,
>>>>>>>>>>>> 使用する方法がよいと考えております.
>>>>>>>>>>>>
>>>>>>>>>>>> 説明不足でお手数をお掛けしたこと,申し訳ございませでした.
>>>>>>>>>>>>
>>>>>>>>>>>> 以上です.貴重な情報を有難うございました.
>>>>>>>>>>>>
>>>>>>>>>>>>>久保(jflute)です。
>>>>>>>>>>>>>
>>>>>>>>>>>>>状況わかりました。ありがとうございます。
>>>>>>>>>>>>>
>>>>>>>>>>>>>通常の外だしSQLのページング検索用に作成されたSQLを再利用して、
>>>>>>>>>>>>>件数取得だけに絞って実行したいという感じでしょうか。
>>>>>>>>>>>>>(別のSQLにするとWhere句が冗長してしまうので)
>>>>>>>>>>>>>そして、ページング実データが必要になるケースも
>>>>>>>>>>>>>別のプログラムで存在するのですよね???
>>>>>>>>>>>>>
>>>>>>>>>>>>>これが前提として:
>>>>>>>>>>>>>
>>>>>>>>>>>>>(1) ページングで取得する件数を1件に設定して
>>>>>>>>>>>>> 「outsideSql().autoPaging().selectPage」を呼出す
>>>>>>>>>>>>>だと、不要なページング実データが一件とはいえ取得してしまいます。
>>>>>>>>>>>>>
>>>>>>>>>>>>>(2) Select Count(*) のみの外だしSQLを別途作成する
>>>>>>>>>>>>>だと、Where句が冗長してしまいます。
>>>>>>>>>>>>>
>>>>>>>>>>>>><A>
>>>>>>>>>>>>>pmb.xsetPaging(false)で確かにisPaging()がfalseになりますが、
>>>>>>>>>>>>>「x」で始まるメソッドは極力アプリケーションで直接利用して
>>>>>>>>>>>>>欲しくないメソッドではあります。互換性の保証はなく、
>>>>>>>>>>>>>あるときにメソッド名が変わってしまう可能性もあります。
>>>>>>>>>>>>>
>>>>>>>>>>>>>なのでそれよりは、以下のように明示的なクラスを作成して、
>>>>>>>>>>>>>利用する方がプログラムの可読性としても良いかなと思います。
>>>>>>>>>>>>>(無名インナークラスでやるとIllegalAccessになってしまいました...)
>>>>>>>>>>>>>
>>>>>>>>>>>>>public static class CountOnlyXxxPmb extends XxxPmb {
>>>>>>>>>>>>> public boolean isPaging() {
>>>>>>>>>>>>> return false;
>>>>>>>>>>>>> }
>>>>>>>>>>>>>}
>>>>>>>>>>>>>
>>>>>>>>>>>>><B>
>>>>>>>>>>>>>もう一つは、XxxPmbに新たに[boolean countOnly]というような
>>>>>>>>>>>>>プロパティを追加して、isPaging()と一緒に判定させてあげるように
>>>>>>>>>>>>>するのも良いかと思います。
>>>>>>>>>>>>>
>>>>>>>>>>>>>パラメータコメントにてisPaging()と必ず一緒に判定:
>>>>>>>>>>>>>/*IF pmb.isPaging() && !pmb.isCountOnly()*/
>>>>>>>>>>>>>/*END*/
>>>>>>>>>>>>>
>>>>>>>>>>>>>もしくは
>>>>>>>>>>>>>
>>>>>>>>>>>>>ExParameterBeanでisPaging()をオーバーライドして一緒に判定:
>>>>>>>>>>>>>public class XxxPmb extends BsXxxPmb {
>>>>>>>>>>>>> public boolean isPaging() {
>>>>>>>>>>>>> return super.isPaging() && !isCountOnly();
>>>>>>>>>>>>> }
>>>>>>>>>>>>>}
>>>>>>>>>>>>>
>>>>>>>>>>>>>後者の方が単体テストでテストもしやすくタイプセーフですね。
>>>>>>>>>>>>>そして、アプリケーションでの呼び出しにて以下のように:
>>>>>>>>>>>>>XxxPmb pmb = new XxxPmb();
>>>>>>>>>>>>>pmb.setCountOnly(true);
>>>>>>>>>>>>>int count = bhv.outsideSql().entityHandling().selectEntity(...);
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>#
>>>>>>>>>>>>># ポイントなのは、DBFluteも単に2WaySQLの仕組みの
>>>>>>>>>>>>># 範疇で便利な機能を作っているだけってところですね。
>>>>>>>>>>>>># なので、2WaySQLの仕組みを利用することでアレンジ可能です。
>>>>>>>>>>>>>#
>>>>>>>>>>>>>
>>>>>>>>>>>>>2009/10/20 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>>>> 久保さま
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> お世話になっております.松原です.
>>>>>>>>>>>>>> 迅速なご返信,大変ありがとうございます.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 言葉足らずで申し訳ございません.
>>>>>>>>>>>>>> 以下,本文中に以下インサートで回答させて頂きます.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>久保(jflute)です。
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>松原さん、こんばんは
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>まずは、前提としてこちらのページをご覧下さい。
>>>>>>>>>>>>>>>http://dbflute.sandbox.seasar.org/contents/behavior/paging.html
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>確認させて下さい。
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>><1>
>>>>>>>>>>>>>>>「Paging機能を使用して件数を取得したい」というのは、
>>>>>>>>>>>>>>>「ページングなし件数取得」のことでよろしいでしょうか?
>>>>>>>>>>>>>> ⇒ その通りです.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>><2>
>>>>>>>>>>>>>>>「Paging機能を使用して件数を取得したい」とのことですが、
>>>>>>>>>>>>>>>ページング実データ(例えば、20件目から40件目のレコード)は
>>>>>>>>>>>>>>>不要なのでしょうか?
>>>>>>>>>>>>>> ⇒ 不要です.言葉足らずで申し訳ございません.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>通常の外だしSQLでのページング検索は、
>>>>>>>>>>>>>>>http://dbflute.sandbox.seasar.org/contents/outside-sql/paging.html
>>>>>>>>>>>>>>>このような感じになります。
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>PagingResultBean<UnpaidSummaryMember> page
>>>>>>>>>>>>>>> = memberBhv.outsideSql().autoPaging().selectPage(path, pmb, entityType);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>int allRecordCount = page.getAllRecordCount(); // ページングなし件数
>>>>>>>>>>>>>>>for (UnpaidSummaryMember member : page) { // ページング実データ
>>>>>>>>>>>>>>>}
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ⇒ この場合,結果として件数だけでなくSELECT句の全カラムも取得していると認識していましたが,
>>>>>>>>>>>>>> 以下の「pmb.isPaging()」をfalseとなるように実行すれば、件数のみが取得できると勝手
>>>>>>>>>>>>>> に憶測した次第でした。
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> では、SQLの実行速度及びデータ転送量を最小限に抑えて,外だしSQLの件数取得を行う場合,
>>>>>>>>>>>>>> (1) ページングで取得する件数を1件に設定して「outsideSql().autoPaging().selectPage」
>>>>>>>>>>>>>> を呼出す
>>>>>>>>>>>>>> (2) Select Count(*) のみの外だしSQLを別途作成する
>>>>>>>>>>>>>> の2通りで実装するのが望ましいということでしょうか?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> また,「ParameterBean#xsetPaging(false);」で一応,件数取得ができているに見えましたが,
>>>>>>>>>>>>>> 使用してはいけないと認識してよろしいでしょうか?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> /*IF pmb.isPaging()*/
>>>>>>>>>>>>>> select member.MEMBER_ID
>>>>>>>>>>>>>> , member.MEMBER_NAME
>>>>>>>>>>>>>> , ...
>>>>>>>>>>>>>> -- ELSE select count(*)
>>>>>>>>>>>>>> /*END*/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 以上です.宜しくお願い致します.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>2009/10/20 <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> お世話になっております.松原です.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 掲題の件,実装方法がサイトから見出すことができず,
>>>>>>>>>>>>>>>> 初歩的な質問とは,思いますが,Paging機能を使用して,
>>>>>>>>>>>>>>>> 件数を取得したい場合,以下の使用方法で問題ないか
>>>>>>>>>>>>>>>> ご教示頂けないでしょうか?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ===============================================
>>>>>>>>>>>>>>>> <サイトの例>
>>>>>>>>>>>>>>>> /*IF pmb.isPaging()*/
>>>>>>>>>>>>>>>> select member.MEMBER_ID
>>>>>>>>>>>>>>>> , member.MEMBER_NAME
>>>>>>>>>>>>>>>> , ...
>>>>>>>>>>>>>>>> -- ELSE select count(*)
>>>>>>>>>>>>>>>> /*END*/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> <使用時の解釈>
>>>>>>>>>>>>>>>> // Parameterの設定
>>>>>>>>>>>>>>>> final prm = new XxxPmb();
>>>>>>>>>>>>>>>> prm.setName("'テスト'");
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> prm.xsetPaging(false); // ← (1)このメソッドでPagingをOFF?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> int cnt = XxxBhv.outsideSql.entityHandling.selectEntity(XxxBhv.PATH_select, prm, Integer.class);
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> System.out.println(cnts); // ← (2)この結果に件数が入っている?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ===============================================
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> (1)と(2)の使い方が正しいか,ご確認の程,宜しくお願いします.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 以上.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>_______________________________________________
>>>>>>>>>>>>>>>Seasar-user mailing list
>>>>>>>>>>>>>>>[E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>_______________________________________________
>>>>>>>>>>>>>Seasar-user mailing list
>>>>>>>>>>>>>[E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>_______________________________________________
>>>>>>>>>>>Seasar-user mailing list
>>>>>>>>>>>[E-MAIL ADDRESS DELETED]
>>>>>>>>>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Seasar-user mailing list
>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>_______________________________________________
>>>>>>>>>Seasar-user mailing list
>>>>>>>>>[E-MAIL ADDRESS DELETED]
>>>>>>>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Seasar-user mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>>
>>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>Seasar-user mailing list
>>>>>>>[E-MAIL ADDRESS DELETED]
>>>>>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Seasar-user mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>>>
>>>>
>>>_______________________________________________
>>>Seasar-user mailing list
>>>[E-MAIL ADDRESS DELETED]
>>>https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
Seasar-user メーリングリストの案内