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%'