括弧の中のANDとORの自動除去機能はDoma 1.4.1 で対応予定
Doma 1.4.0だと、SQLの中の式コメントの評価の結果、WHERE句とHAVING句のうしろにANDやORが続く場合は自動で除いているのですが、開き括弧のうしろにANDやORが続く場合は対象外でした(考慮し忘れていました)。1.4.1 で対応します。
すぐに試してみたい方はSNAPSHOTをどうぞ。
http://maven.seasar.org/maven2-snapshot/org/seasar/doma/doma/1.4.1-SNAPSHOT/doma-1.4.1-20100410.025503-1.jar
SNAPSHOT使ってもらえれば、次のようなSQLの組み立て条件が複雑なケースに対応できるようになります(もちろん、このままSQLのツールで実行可能です)。
select * from employee where /*%if @isNotEmpty(name) */ name like /* @contain(name) */'%test%' escape '$' /*%end */ /*%if min != null || max != null*/ or ( /*%if min != null */ age >= /* min */10 /*%end */ /*%if max != null */ and age <= /* max */70 /*%end */ ) /*%end */
たとえば、name != null && min == null && max != nullならば、最終的に次のSQLになります。(括弧の中のandが除去されます)
select * from employee where name like ? escape '$' or ( age <= ? )
name == null && min == null && max != nullならば、最終的に次のSQLになります。(括弧の中のandとwhereの後ろのorが除去されます)
select * from employee where ( age <= 40 )
全部nullだと、こうなります。
select * from employee