如何执行 IN() 和 WHERE=?使用 Spring 的 JDBCTemplate 进行 SQL 查询

Posted

技术标签:

【中文标题】如何执行 IN() 和 WHERE=?使用 Spring 的 JDBCTemplate 进行 SQL 查询【英文标题】:How to do IN() and WHERE=? SQL queries with Spring's JDBCTemplate 【发布时间】:2015-01-21 19:00:26 【问题描述】:

这是How to execute IN() SQL queries with Spring's JDBCTemplate effectivly?的扩展

我希望将查询修改为:

"SELECT * FROM foo WHERE name=? and value IN (:ids)"

如何修改给定的代码以支持 name=?参数

Set<Integer> ids = ...;

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", ids);

List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)",
     getRowMapper(), parameters);

【问题讨论】:

为什么不使用'name'作为命名参数呢?名称=:名称 使用NamedParameterJdbcTemplate 而不是JdbcTemplate 【参考方案1】:

我成功使用了两个 cmets。

我会将下面的代码发布给以后可能会发现这个问题的人:

String sql = "SELECT * FROM foo WHERE name=:name and value IN (:ids)";

Set<Integer> ids = ...;
String name = "John";

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", ids);
parameters.addValue("name",name);

List<Foo> foo = getNamedParameterJdbcTemplate().query(sql, parameters, getRowMapper());

【讨论】:

以上是关于如何执行 IN() 和 WHERE=?使用 Spring 的 JDBCTemplate 进行 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql where in(几千个ID)如何优化

使用 MySQLdb 执行“SELECT ... WHERE ... IN ...”

在 CouchDB 中执行 WHERE - IN 查询

在 Postgresql 中的多个列上执行 WHERE IN

哪个更快,select * from table where id=a

SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”