如何通过Spring JdbcTemplate生成动态"in(...)"sql列表?

wsb*_*383 30 spring

是否可以通过Jdbc模板在SQL查询中生成任意"in()"列表:

例:

"select*from t where c in(#)",但是'#'可以是仅在运行时已知的任意值列表.

axt*_*avt 37

是的,如果您使用NamedParameterJdbcTemplateSimpleJdbcTemplate使用命名参数,则可以在Spring中使用.List参数可以设置为java.util.List:

List<String> list = new ArrayList<String>();

list.add("A");
list.add("B");
list.add("C");

List<SomeObject> result = simpleJdbcTemplate.query("SELECT * FROM t WHERE c in (:list)",
    new RowMapper<SomeObject>() { ... },
    Collections.singletonMap("list", list));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当使用?s 替换命名参数时,Spring会根据实际列表的大小在内部创建具有所需占位符数的SQL查询.

  • 如果你的IN(...)参数不是字符串(文本),这不起作用.例如,如果你想以这种方式传递List <Long>,你会得到错误的数据类型:java.lang.NumberFormatException:对于输入字符串:"[2,3,4]" (5认同)