SQLのコメント式でforループをサポート!!
次のバージョンのDoma 0.9.10で入ります。
SQLファイルをこんな感じで書けます。
select * from EMPLOYEE where /*%if names.size() > 0*/ /*%for name : names*/ EMPLOYEE_NAME like /*@startWith(name)*/'hoge'--hasNext " or " -- /*%end*/ /*%end*/
/*%for name : names*/ は Javaの拡張forループとおんなじ意味で、「:」の左側がループ毎の要素を表す変数、右側がIterableな式です。 /*%end*/までが繰り返されます。
--hasNext " or " -- は、次の要素がまだある場合のみ式の評価結果(この場合は「 or 」という文字列)を出力します。
使用例
(上のSQLファイルに関連付けられる)Daoのメソッド
@Select
List<Employee> selectByNames(List<String> names);
Daoのメソッドを呼ぶコード
EmployeeDao dao = new EmployeeDaoImpl(); dao.selectByNames(Arrays.asList("A", "B"));
実行されるSQL
select * from EMPLOYEE where EMPLOYEE_NAME like 'A%' or EMPLOYEE_NAME like 'B%'
2行目の部分がforループで出力されています。「EMPLOYEE_NAME like 'A%'」と「EMPLOYEE_NAME like 'B%'」の間に「 or 」があって「EMPLOYEE_NAME like 'B%'」の後ろに「 or 」がないのはhasNextコメントが効いているからです。