Like検索対応できた
前方一致検索の場合は@startWithという組み込み関数を使います。SQLファイルにはこう記述しておきます。
select * from employee where name like /* @startWith(name) */'a%'
呼び出し側では、%の連結が不要です。ここでは「S」を渡しています。
EmployeeDao dao = new EmployeeDaoImpl(); List<Employee> list = dao.selectWithPrefixSearch("S");
発行されるSQLは、@startWithにより「S」に「%」が付与されて「S%」になります。
select * from employee where name like 'S%'
呼び出し元で、「%」や「_」を含んだ文字列を渡した場合、@startWithはデフォルトでは「\」でエスケープします。Oracleだと全角の「%」や「_」もワイルドカード扱いなのですが、Oracleを使った場合はそれにも対応しています(組み込み関数の実装はDialectごとに持つようにしています。カスタマイズもしやすい。)。
@startWithにはエスケープ文字指定版もあります。第2引数で指定。
select * from employee where name like /* @startWith(name, '$') */'a%' escape '$'
おんなじ感じで後方一致検索のための@endWithと前方後方一致検索のための@containも用意してます。
+演算子で文字連結もできるようにしました。自動エスケープが不要ならこっちでもOK。この例はchar型の「%」を連結しています。
select * from employee where name like /*name + '%'*/'a%'