我有一个带有 Foos 的 MySQL 表。每个 Foo 都有一个数字非唯一代码和一个名称。现在我需要查找是否有任何具有某些代码之一的 Foo 恰好具有以给定字符串开头的名称。在普通 SQL 中,这将是微不足道的:
select * from FOO where CODE in (2,3,5) and NAME like 'bar%';
但是我现在如何在春天正确地做到这一点?不需要“喜欢”运算符,我会这样做:
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 会以某种方式支持这一点,但我无法弄清楚。