QUERYのカスタマイズ2(バインド変数)

SQL中に?を書きたくない場合はバインド変数を利用する。

public static final String findByTitle_ARGS = "prmtitle";
public static final String findByTitle_QUERY = "select * from cd where title = /*prmtitle*/";
public List findByTitle(String title);


このメソッドを実行すると、
発効されるSQLは以下のようになる(引数に'あああ'と渡した場合)。

select * from cd where title = 'あああ'


バインド変数は、ARGSアノテーションで指定した名前(あるいはBEANのプロパティー)をSQL中で"/*名前*/"という風に指定できる。上の例は、ARGSアノテーションで指定した名前prmtitleをSQL文中で置き換えている。



EL式みたいな感じでJavaBeansにアクセスすることも可能。

public static final String findByCriteria_ARGS = "criteria";
public static final String findByCriteria_QUERY = "title = /*criteria.title*/";
public List findByCriteria(Criteria criteria);

この場合、Criteriaクラスのtitleプロパティーの値(getTitle()の返り値)が代入される。