如果我有引号了一堆东西,我发现自己做这样的事情:Java Spring:使用JdbcTemplates使用IN子句执行mysql查询的最佳方法是什么?
String sql = "SELECT col1, col2, col3 "
+ "FROM my_awesome_table "
+ "WHERE strValue IN (%s)";
sql = String.format(sql, COMMA_JOINER.join(Iterables.transform(strValues,
new Function<String, String>() {
@Override
public String apply(String input) {
return "'" + input.replaceAll("'", "''") + "'";
}
})));
List<ResultObject> resultObjects =
getSimpleJdbcTemplate().query(sql, resultObjectRowMapper());
但它似乎很奇怪,我要建立自己的IN子句,围绕着琴弦用单引号和逃避他们自己。必须有更好的方式!一些额外的上下文:我不希望被查询的数量太多(最多几十或几百行),只要我们不一次一个地查询这些行,优化就不是太多问题!
这很好用(虽然必须将行映射器切换为第二个arg)谢谢! – Zugwalt
一个注意事项:从Spring 3.1开始,不推荐使用SimpleJdbTemplate。 JdbcTemplate和NamedParameterJdbcTemplate现在提供了SimpleJdbcTemplate的所有功能。对于IN子句,您必须使用NamedParameterJdbcTemplate。 – masted