Java Spring NamedParameterJdbcTemplate delete with IN子句

Java Spring NamedParameterJdbcTemplate delete with IN子句,java,spring,jdbc,jdbctemplate,Java,Spring,Jdbc,Jdbctemplate,当我尝试执行删除时,items设置为List,NamedParameterJdbcTemplate似乎没有为生成语句的所有占位符设置值 public class DBTest { public static void main(String[] args) { BasicDataSource basicDataSource = new BasicDataSource(); basicDataSource.setDriverClassName("com.m

当我尝试执行删除时,
items
设置为
List
NamedParameterJdbcTemplate
似乎没有为生成语句的所有占位符设置值

public class DBTest {

    public static void main(String[] args) {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("qwedsa");

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(new JdbcTemplate(basicDataSource));

        ImmutableMap<String, ?> param = ImmutableMap.of("items", newArrayList("a", "b", "c"), "user_id", 1);
        Map<String, ?>[] params = new Map[]{param};
        template.batchUpdate("delete from sample where col1 in (:items) and user_id = :user_id", params);
    }
}

NamedParameterJdbcTemplate
是否展开删除语句的列表?

您可以将代码简化为:

public static void main(String[] args) {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("qwedsa");

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(basicDataSource);

        ImmutableMap<String, ?> param = ImmutableMap.of("items", newArrayList("a", "b", "c"), "user_id", 1);
        template.update("delete from sample where col1 in (:items) and user_id = :user_id", param);
    }
publicstaticvoidmain(字符串[]args){
BasicDataSource BasicDataSource=新的BasicDataSource();
basicDataSource.setDriverClassName(“com.mysql.jdbc.Driver”);
basicDataSource.setUrl(“jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
basicDataSource.setUsername(“根”);
basicDataSource.setPassword(“qwedsa”);
NamedParameterJdbcTemplate=新的NamedParameterJdbcTemplate(basicDataSource);
ImmutableMap参数=ImmutableMap.of(“项目”,newArrayList(“a”、“b”、“c”),“用户id”,1);
update(“从样本中删除,其中col1位于(:items)中,user_id=:user_id”,param);
}

这很好

我试过你的代码,它对我很好。您使用的是哪个版本的Spring?@geo和4.0.5.RELEASE我在
3.2.8.RELEASE
上试用过,效果很好。您可以发布您正在使用的整个方法吗?请尝试更改:
new NamedParameterJdbcTemplate(new JdbcTemplate(basicDataSource))
new NamedParameterJdbcTemplate(basicDataSource)
,这不会改变任何内容。我已经用源代码更新了这个问题。在实际的应用程序中,我有一个带有此类参数的批处理。所以您实际上需要
batchUpdate
方法吗?
public static void main(String[] args) {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("qwedsa");

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(basicDataSource);

        ImmutableMap<String, ?> param = ImmutableMap.of("items", newArrayList("a", "b", "c"), "user_id", 1);
        template.update("delete from sample where col1 in (:items) and user_id = :user_id", param);
    }