QUERYのカスタマイズ
マニュアル(http://homepage3.nifty.com/seasar/s2dao.html)を見て自分で試してみたメモ。
http://muimi.com/j/aop/seasar/s2dao/ のつづき。
Seasarのことは はてな に書いた方が間違いも減るかなということで。
SELECT SQLをカスタマイズするにはいくつかの方法がある。
シンプルな一致(=)条件での検索には、ARGSアノテーションを使う。
ARGSアノテーションは「メソッド名_ARGS」で定義する。
public static final String findByTitle_ARGS = "title"; public List findByTitle(String title);
発効されるSQLは以下のようになる(メソッド引数に"あああ"を渡した場合)。
SELECT CD.content, CD.id, CD.title FROM CD WHERE CD.title = 'あああ'
もうちょっといろいろ書きたいときは、QUERYアノテーションを使う。
QUERYアノテーションは「メソッド名_QUERY」で定義する。
public static final String findByTitle_QUERY = "title = ?"; public List findByTitle(String title);
発効されるSQLは上と同じ。
QUERYアノテーションは、WHERE句の後を記述すると、WHEREまでを自動的に作成してくれる。
SELECTから全部書くのもアリである。
SELECTから全部書くパターンは、集約関数やもうちょっと複雑なSQLを書くときに使うと思われる。
public static final String findByTitle_QUERY = "select * from cd where title = ?"; public List findByTitle(String title);
SQLが長く複雑になる場合や、ソースにいろいろ書くのが嫌いな人は、SQL部分を外出しできる。
Dao名_メソッド名.sqlというファイルを作成し、そこにSQLを記述する。
dao/ CdDao.java CdDao_findByTitle.sql
外出しSQLの場合は、WHERE以降でなく、SELECTから全部書く。
SELECTでなく、更新系のSQLをカスタマイズする場合も外出しSQLを使う。