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を使う。