如果我有引號了一堆東西,我發現自己做這樣的事情: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