PlayFramework Listを使ってIN句でqueryをかける
idとtypeでqueryをかけて結果を取得するような場合、bindを使ってListの内容をそのままIN句に使うことができます。
String型のリストなら自動でシングルクォートを付けて、SQLエスケープもやってくれるようです。
List<MyModel> list = new ArrayList(); List<Long> idList = new ArrayList(); // idListにIDを追加 List<String> typeList = new ArrayList(); // typeListに抽出するTypeを追加 list = MyModel.find("id IN (:idList) AND typeStr IN (:typeList)").bind("idList", idList).bind("typeList", typeList).fetch(); // id IN (1, 2, 3) AND typeStr IN ('foo', 'bar', 'hoge'); return list;
Source:
http://www.playframework.org/documentation/1.2/guide6
http://stackoverflow.com/questions/7205955/is-my-sql-query-prone-to-sql-injection-or-other-attacks