spring 如何使用namedParameterJDBCTemplate batchUpdate为批量记录更新表的列?

b4lqfgs4  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(78)

我想更新一列表的批量记录。我如何使用NamedParameterJdbcTemplate来实现这一点

List<Long> ids = new ArrayList();
ids.add(1);
ids.add(2);

String updateQuery = "update product set status = 'P' where id = ?";
SqlParameterSource  batch = SqlParameterSourceUtils.createBatch(ids.toArray());

namedParameterJDBCTemplate.batchUpdate(updateQuery, batch)

字符串
然而,上述方法并不奏效。请指教

vhipe2zx

vhipe2zx1#

您正在使用NamedParameterJdbcTemplate,但没有在查询中使用名称。你应该有这样的东西。

Map<String, Long> row1 = Map.of("id", 1L);
Map<String, Long> row2 = Map.of("id", 2L);

SqlParameterSource  batch = SqlParameterSourceUtils.createBatch(List.of(row1, row2);

String updateQuery = "update product set status = 'P' where id = :id";
namedParameterJDBCTemplate.batchUpdate(updateQuery, batch)

字符串
或者不使用NamedParameterJdbcTemplate,而使用常规的JdbcTemplate

List<Object[]> ids = List.of(new Object[] {1L}, new Object[] {2L});
String updateQuery = "update product set status = 'P' where id = ?";
jdbcTemplate.batchUpdate(updateQuery, ids)


或者,如果ID列表不是太大,使用带有IN子句的NamedParameterJdbcTemplate,而不是批量更新。

List<Long> ids = List.of(1L, 2L);

String updateQuery = "update product set status = 'P' where id in (:ids)";
namedParameterJDBCTemplate.update(updateQuery, Map.of("ids", ids));

相关问题