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);
}