SQLファイルとかバインド変数コメントをつかった動的なSQLとか

example.EmpDaoにこんなメソッドがあるとします。

@Select
List<Emp> selectByName(StringDomain name);

このとき対応するSQLファイルは、META-INF/example/EmpDao/selectByName.sql になります。同じDaoのSQLファイルだけが同じディレクトリに並ぶことになるので管理しやすいと思います。
あと、SQLファイルの存在チェックはaptでコンパイル時にやります。これで、実行時に対応するファイルがなかったという単純ミスがなくなります。


メソッドのパラメータとバインド変数の対応づけは次のように/*:〜*/というコメントで行います。

select * from emp where name = /*:name*/'aaa'

S2Daoのようにifも使えます。

select * from emp where /*if name != null*/name = /*:name*/'aaa'/*end*/

このとき、ifの条件が成り立たなかったら(name == null)ならば、where句以降が除去されて「select * from emp」だけが実行されます。これは、S2Daoの/*BEGIN*/コメント相当が勝手に適用されるということです。whereとhavingのところで適用されます。

S2Daoのようにelseも使えます。

select * from emp where 
/*if name != null*/name = /*:name*/'aaa'
--else name is null 
/*end*/

新機能として--elseif 〜 --を使えるようにしてみました。〜のところに式を書けます。

select * from emp where 
/*if name != null*/name = /*:name*/'aaa'
--elseif name == ""-- dept = 99
--else name is null 
/*end*/