[Seasar-user:21093] Re: S2DAO SQLのスマートな記述方法について

Hiroyuki Ohnaka [E-MAIL ADDRESS DELETED]
2011年 10月 21日 (金) 21:10:35 JST


大中(せと)です。

formに
public boolean isATarget(){
    return getSearchB() != null && !getSearchB().equals("")
                   && getSearchC() != null && !getSearchC().equals("")
                    && getSearchA() != null &&
!getSearchA().equals("");
}

というメソッドを追加して


SELECT *
 FROM XXXX
/*BEGIN*/
 WHERE
   /*BEGIN*/
   (
     /*IF form.searchB != null && form.searchB != "" */XXXX.B = 2/*END*/
     /*IF form.searchC != null && form.searchC != "" */OR XXXXX.C = 3/*END*/
   )
   /*END*/
     /*IF form.ATarget  */ AND XXXX.A = 1/*END*/
/*END*/

という感じでしょう。
# メール編集画面で書いただけなのでこのままでいけないかもしれませんが、
# イメージということで。

2011年10月21日16:21 今田 昇 <[E-MAIL ADDRESS DELETED]>:
> pianyiさん こんにちは。
> 今田と申します。
>
> 普段からS2Daoを利用させてもらっています。
>
> B、Cの条件式を2回書かなくて済む方法を期待しておられると思いますが、
> 私にもそれは見つけられませんでした。
>
> 出力内容のないIF文を無くし、
> A→B→Cの順番に書き直してみました。
> 多少は見やすくなっていると同時に、
> 意図が分かりやすくなっていると思うのですがどうでしょう?
>
> SELECT *
>  FROM XXXX
> /*BEGIN*/
> WHERE
>    /*IF form.searchA != null && form.searchA != "" */XXXX.A = 1/*END*/
>    /*IF (form.searchB != null && form.searchB != "") || (form.searchC != null && form.searchC != "") */
>      /*BEGIN*/AND (
>        /*IF form.searchB != null && form.searchB != "" */XXXX.B = 2/*END*/
>        /*IF form.searchC != null && form.searchC != "" */OR XXXXX.C = 3/*END*/
>      )/*END*/
>    /*END*/
> /*END*/
>
>
> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of [E-MAIL ADDRESS DELETED]
> Sent: Thursday, October 20, 2011 6:59 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:21091] S2DAO SQLのスマートな記述方法について
>
> いつも大変お世話になっております。
> pianyi と申します。
>
>
> 現在、S2DAOを使用し、SQLファイルの記述を行っております。
> やりたい事の実現は出来たのですが、もっと良い記述方法は無いでしょうか。
>
>
> 実際のSQL:
> SELECT *
>  FROM XXXX
> /*BEGIN*/
>  WHERE
>    /*BEGIN*/
>    (
>      /*IF form.searchB != null && form.searchB != "" */XXXX.B = 2/*END*/
>      /*IF form.searchC != null && form.searchC != "" */OR XXXXX.C = 3/*END*/
>    )
>    /*END*/
>    /*IF form.searchB != null && form.searchB != "" *//*END*/
>    /*IF form.searchC != null && form.searchC != "" *//*END*/
>    /*IF form.searchA != null && form.searchA != "" */AND XXXX.A = 1/*END*/
> /*END*/
> ;
>
> 同じ条件が2箇所に必要で、且つ下の方は出力内容の無いIF文になっています。
>
> 下記URLの記述を見て試してみましたが、うまく動作しませんでした。(記事が古すぎますよね…)
> http://d.hatena.ne.jp/higayasuo/20040510/1084142290
>
> 条件Aのみ、条件A+B+C、条件B+Cのみ、条件なし の全パターンでSQLが実行され
> 且つ、もっとスマートな記述方法がありましたらご教授願います。
>
> 以上、よろしくお願いいたします。
>
>
>
> 開発環境:
> ・Java1.6.0_24
> ・Oracle11g
> ・s2-dao-1.0.51.jar
> ・s2-extension-2.4.44.jar
> ・s2-framework-2.4.44.jar
> _______________________________________________
> 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 メーリングリストの案内