[Seasar-user:20502] Re: 【DBFlute】外だしSQLについておご教示ください。

kubo [E-MAIL ADDRESS DELETED]
2011年 1月 11日 (火) 19:38:46 JST


久保(jflute)です。

> 久保さんのCBで作成していただいている内容を外だしSQLファイルに
> 書きたいのですが。。。。。

ということであれば、

WHERE
       USR040TBL.USER_KBN in /*pmb.userKbnList*/(1, 2)
       /*IF pmb.txtSelect == 'あ'*/
       and (USER_SHIMEI_KANA LIKE 'ア%' or USER_SHIMEI_...)
       /*END*/
       /*IF pmb.txtSelect == 'か'*/
       ...(「わ」まで)
       /*END*/
       and USR110TBL.USER_ID    = USR040TBL.USER_ID

※USR040TBL.USER_KBNの条件を追加
※Pmbに「List<Integer> userKbnList」を追加

という感じになるのではないかと思います。
userKbnList は、プログラムでラジオボタンの値を
1 や 2 などの区分値に置き換えてしまえばよいかと。
その他メールに載っていない別の条件などの仕様に
合わせて適切にIFコメント入れて頂ければと。

あと、固定条件があるならBEGINは不要です。
し、そもそもBEGINコメントの使い方を間違って
いるようにも思えますので以下お読み下さい。

パラメータコメント - BEGINコメント | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/outsidesql/pmcomment.html#begincomment

さらに、USER_SHIMEI_KANAの部分があまりに
記述が大変そうなので、FORコメントを使って
もっとシンプルにしてもよいのではないかと思います。
(プログラムでできることはプログラムでやってしまった方が
自動テストなど様々な面で管理しやすいかと思います)

パラメータコメント - FORコメント | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/outsidesql/pmcomment.html#forcomment

最後に、以下のページを読んでみて下さい。

フィードバック | DBFlute
http://dbflute.sandbox.seasar.org/ja/manual/topic/office/feedback.html

もっと早い解決のためにヒントになるかもしれません。
特に「考察の提示」の部分は大事です。
(いまだに櫻井さんの知りたいことの回答に
なってるかどうか自信がないので...)

2011/1/11 櫻井 周里 <[E-MAIL ADDRESS DELETED]>:
> 櫻井と申します。
>
> いつも大変お世話になっております。
> ご返信ありがとうございます。
>
> 説明が足りないにもかからわず、ありがとうございます。
> 要件はまさにその久保さんのイメージされている通りです。
>
> 久保さんのCBで作成していただいている内容を外だしSQLファイルに
> 書きたいのですが。。。。。
>
> いつもいつも申し訳ないです。
> ご教示いただけますようよろしくお願いいたします。
>
> 櫻井
> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of kubo
> Sent: Friday, January 07, 2011 9:32 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:20487] Re:【DBFlute】外だしSQLについておご教示ください。
>
> 久保(jflute)です。
>
> 櫻井さん、こんばんは
>
> 外だしSQLでの条件作成にお悩みとのことですが、
> もう少し悩みの具体的な内容を教えて頂けると助かります。
> 「1まで組み合わせるとできないでかなり困っています」
> の部分の詳細がもっと説明されていればと。
> (その方がML閲覧者もコメントしやすいかと思います)
>
> ちなみに、この要件を ConditionBean で実装するとなると以下の
> ようなイメージになると思いますが合っていますでしょうか?
> (実際にはメールに載っていない他の複雑な条件などがあって、
> CBではなく外だしSQLを選択しているという前提だと思われますが)
>
> Usr110tblCB cb = new Usr110tblCB();
> cb.setupSelect_Usr040tbl();
> List<Integer> userKbnList;
> if (rdoMember == 在籍者) {
>    userKbnList = Arrays.asList(1);
> } else if (rdoMember == 退職者) {
>    userKbnList = Arrays.asList(2);
> } else if (rdoMember == 全部) {
>    userKbnList = Arrays.asList(1, 2, 3);
> } else {
>    // exception?
> }
> cb.query().queryUsr040tbl().setUserKbn_InScope(userKbnList)
> cb.query().arrangeKana_PrefixSearch(txtSelect);
>
> ---
>
> <Usr110tblCQ>
> public void arrangeKana_PrefixSearch(String targetLine) {
>    if (targetLine == "あ") {
>        arrangeKana_PrefixSearch_Aiueo();
>    } else if (targetLine == "か") {
>        arrangeKana_PrefixSearch_Kakikukeko();
>    } else if (targetLine == "さ") {
>    ...(それぞれ「わ」まで)
>    }
> }
>
> protected void arrangeKana_PrefixSearch_Aiueo() {
>    doArrangeKana_PrefixSearch("ア", "イ", "ウ", "エ", "オ");
> }
>
> protected void arrangeKana_PrefixSearch_Kakikukeko() {
>    doArrangeKana_PrefixSearch("カ", "キ", "ク", "ケ", "コ");
> }
> ...(それぞれ「わ」まで)
>
> protected void doArrangeKana_PrefixSearch(String... prefixes) {
>    StringBuilder sb = new StringBuilder();
>    for (String prefix : prefixes) {
>        sb.append(prefix).append(" ");
>    }
>    LikeSearchOption option = new LikeSearchOption();
>    option.likePrefix().splitByBlank().asOrSplit();
>    setUserShimeiKana_LikeSearch(sb.toString().trim(), option);
> }
>
> 2011/1/7 櫻井 周里 <[E-MAIL ADDRESS DELETED]>:
>> お世話になっております。
>>
>> いつも参考にさせていただいてます。
>>
>>
>>
>> 開発でDBFluteを使っていますが、外だしSQLのところで悩んでいます。
>>
>> お手数ですが、ぜひご教示くださいますようよろしくお願いいたします。
>>
>>
>>
>> ラジオボタンの値が在籍者の場合(pmb.rdoMember =’ 在籍者’)
>>
>> 1:USR040TBL.USER_KBNが「1」のものを抽出
>>
>> 2:選択行が「あ」行の場合(pmb.txtSelect = ‘あ’)、USR110TBL.USER_SHIMEI_KANJI ‘あ%’ or ‘い%’
>> を抽出
>>
>> (選択行はあ~わまで)
>>
>> 3:USR040TBL.USER_ID = USR110TBL.USER_ID
>>
>> ラジオボタンの値が退職者の場合(pmb.rdoMember =’ 退職者’)
>>
>> 1:USR040TBL.USER_KBNが「2」のものを抽出
>>
>> 2:選択行が「あ」行の場合(pmb.txtSelect = ‘あ’)、USR110TBL.USER_SHIMEI_KANJI ‘あ%’ or ‘い%’
>> を抽出
>>
>> (選択行はあ~わまで)
>>
>> 3:USR040TBL.USER_ID = USR110TBL.USER_ID
>>
>> ラジオボタンの値が全部の場合(pmb.rdoMember =’ 全部’)
>>
>> 1:USR040TBL.USER_KBNが「1」、「2」、「3」のものを抽出
>>
>> 2:選択行が「あ」行の場合(pmb.txtSelect = ‘あ’)、USR110TBL.USER_SHIMEI_KANJI LIKE ‘あ%’ or
>> ‘い%’ を抽出
>>
>> (選択行はあ~わまで)
>>
>> 3:USR040TBL.USER_ID = USR110TBL.USER_ID
>>
>>
>>
>> という条件を外だしSQLで書きたいのですが。。。。。。
>>
>> 2,3の組み合わせはできたのですが、1まで組み合わせるとできないでかなり困っています。
>>
>> 大変申し訳ございませんが、ご教示よろしくお願いいたします。
>>
>>
>>
>> 現在できているソースを以下に記載させていただきます。
>>
>> -- #UserSelectMemberListCme#
>>
>> -- *USER_ID*
>>
>> -- *USER_KBN*
>>
>> -- *USER_SHIMEI_KANJI*
>>
>>
>>
>>
>>
>> -- !UserSelectMemberListPmb!
>>
>> -- !!String txtSelect!!
>>
>> -- !!String rdoMember!!
>>
>>
>>
>>
>>
>> SELECT
>>
>>         USR110TBL.USER_ID           USER_ID
>>
>>        ,USR040TBL.USER_KBN          USER_KBN
>>
>>        ,USR110TBL.USER_SHIMEI_KANJI USER_SHIMEI_KANJI
>>
>> FROM
>>
>>        USR110TBL,
>>
>>        USR040TBL
>>
>> WHERE
>>
>> /*BEGIN*/
>>
>>        /*IF pmb.txtSelect == 'あ'*/
>>
>>        and (USER_SHIMEI_KANA LIKE 'ア%' or USER_SHIMEI_KANA LIKE 'イ%' or
>> USER_SHIMEI_KANA LIKE 'ウ%' or USER_SHIMEI_KANA LIKE 'エ%' or USER_SHIMEI_KANA
>> LIKE 'オ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'か'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'カ%' or USER_SHIMEI_KANA LIKE 'キ%' or
>> USER_SHIMEI_KANA LIKE 'ク%' or USER_SHIMEI_KANA LIKE 'ケ%' or USER_SHIMEI_KANA
>> LIKE 'コ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'さ'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'サ%' or USER_SHIMEI_KANA LIKE 'シ%' or
>> USER_SHIMEI_KANA LIKE 'ス%' or USER_SHIMEI_KANA LIKE 'セ%' or USER_SHIMEI_KANA
>> LIKE 'ソ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'た'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'タ%' or USER_SHIMEI_KANA LIKE 'チ%' or
>> USER_SHIMEI_KANA LIKE 'ツ%' or USER_SHIMEI_KANA LIKE 'テ%' or USER_SHIMEI_KANA
>> LIKE 'ト%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'な'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'ナ%' or USER_SHIMEI_KANA LIKE 'ニ%' or
>> USER_SHIMEI_KANA LIKE 'ヌ%' or USER_SHIMEI_KANA LIKE 'ネ%' or USER_SHIMEI_KANA
>> LIKE 'ノ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'は'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'ハ%' or USER_SHIMEI_KANA LIKE 'ヒ%' or
>> USER_SHIMEI_KANA LIKE 'フ%' or USER_SHIMEI_KANA LIKE 'ヘ%' or USER_SHIMEI_KANA
>> LIKE 'ホ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'ま'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'マ%' or USER_SHIMEI_KANA LIKE 'ミ%' or
>> USER_SHIMEI_KANA LIKE 'ム%' or USER_SHIMEI_KANA LIKE 'メ%' or USER_SHIMEI_KANA
>> LIKE 'モ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'や'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'ヤ%' or USER_SHIMEI_KANA LIKE 'ユ%' or
>> USER_SHIMEI_KANA LIKE 'ヨ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'ら'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'ラ%' or USER_SHIMEI_KANA LIKE 'リ%' or
>> USER_SHIMEI_KANA LIKE 'ル%' or USER_SHIMEI_KANA LIKE 'レ%' or USER_SHIMEI_KANA
>> LIKE 'ロ%')
>>
>>        /*END*/
>>
>>        /*IF pmb.txtSelect == 'わ'*/
>>
>>        or (USER_SHIMEI_KANA LIKE 'ワ%')
>>
>>        /*END*/
>>
>> /*END*/
>>
>>        and USR110TBL.USER_ID    = USR040TBL.USER_ID
>>
>>
>>
>>
>>
>> お手数をおかけいたします。
>>
>> よろしくお願いいたします
>>
>>
>>
>> 櫻井
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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 メーリングリストの案内