使用spring jdbc模板查询参数列表

ton*_*ony 5 spring jdbc

Spring JDBC 模板的新手,但我想知道是否能够传递参数列表并对列表中的每个参数执行一次查询。正如我看到的许多示例,传递的参数列表用于使用提供的所有参数执行查询。相反,我试图多次执行查询,并且每次都使用列表中的新参数。

例如:假设我有一个 Id 列表 - 参数(字符串)

List<String> params = new ArrayList<String>();
params.add("1234");
params.add("2345");
Run Code Online (Sandbox Code Playgroud)

尝试做类似的事情:

getJdbcTemplate().query(sql, params, new CustomResultSetExtractor());
Run Code Online (Sandbox Code Playgroud)

我知道根据文件是不允许的。我的意思是,它必须是一个数组。我见过一些简单的例子,其中查询类似于"select * from employee where id = ?"并且它们正在传递new Object[]{"1234"}到方法中。我试图避免 IN() 条件。在我的情况下,每个 id 将返回多行,这就是我使用 ResultSetExtractor 的原因。

我知道一种选择是迭代列表并将列表中的每个 id 作为参数包含在内,例如:

for(String id : params){
  getJdbcTemplate().query(sql, new Object[]{id}, new CustomResultSetExtractor());
}
Run Code Online (Sandbox Code Playgroud)

只是想知道我是否可以通过其他方式做到这一点。对不起,我应该提到我正在尝试做一个选择。最初希望为每个结果集返回一个自定义对象列表。

Zil*_*nas 2

您确实需要为 API 传递一个参数数组,但您也可以假设您的第一个参数是一个数组。我相信这应该有效:

String sql = "select * from employee where id in (:ids)"; // or should there be '?'
getJdbcTemplate().query(sql, new Object[]{params}, new CustomResultSetExtractor());
Run Code Online (Sandbox Code Playgroud)

或者您可以明确指定参数是一个数组

getJdbcTemplate().query(sql, new Object[]{params}, new int[]{java.sql.Types.ARRAY}, new CustomResultSetExtractor());
Run Code Online (Sandbox Code Playgroud)