Foosを使用したMySQLテーブルがあります。各Fooには、一意でない数値のコードと名前があります。ここで、特定のコードの1つを持つFooが、特定の文字列で始まる名前を持っているかどうかを確認する必要があります。通常のSQLでは、これは簡単です。
select * from FOO where CODE in (2,3,5) and NAME like 'bar%';
しかし、今春にこれを適切に行うにはどうすればよいでしょうか?'like'演算子を必要とせずに、次のようにします。
public List<Foo> getByName(List<Integer> codes, String namePart) {
String sql = "select * from FOO where CODE in (:codes) and NAME=:name"
Map<String,Object> params = new HashMap<String,Object>();
params.put("codes", codes);
params.put("name", namePart);
return getSimpleJdbcTemplate().query(sql, new FooRowMapper(), params);
}
ただし、「like」では何も機能しないようです:NAME like :name%
、、、NAME like ':name%'
またはNAME like ?%
名前付きパラメーターの代わりにプレースホルダーを使用する場合。
私は残忍で、次のように入力することができます
String sql = "select * from FOO where CODE in (:codes) and NAME like '"+namePart+"%'";`
しかし、明らかに、Springが入力パラメーターなどを適切にサニタイズするのは素晴らしいことです。
Springはどういうわけかこれをサポートすると思うかもしれませんが、私には理解できません。