JdbcTemplate支持使用batchUpdate()方法进行批量更新操作,主要步骤如下:
- 定义更新SQL语句,包含参数占位符:
String sql = "UPDATE user SET age = ? WHERE id = ?";
- 构造批量参数列表,每个元素对应一组参数值:
List<Object[]> batchArgs = Arrays.asList(
new Object[] {30, 1},
new Object[] {40, 2},
new Object[] {20, 3}
);
- 执行batchUpdate()方法,传入SQL语句和参数列表:
jdbcTemplate.batchUpdate(sql, batchArgs);
- JdbcTemplate会自动构造批量SQL语句并执行:
UPDATE user SET age = 30 WHERE id = 1;
UPDATE user SET age = 40 WHERE id = 2;
UPDATE user SET age = 20 WHERE id = 3;
一个完整的例子:
String sql = "UPDATE user SET age = ? WHERE id = ?";
List<Object[]> batchArgs = Arrays.asList(
new Object[] {30, 1},
new Object[] {40, 2},
new Object[] {20, 3}
);
jdbcTemplate.batchUpdate(sql, batchArgs);
相比单条更新,批量更新可以大大提高执行效率,这是因为:
- 数据库可以优化批量SQL的执行计划。
- 可以减少网络传输,一个请求完成多次更新操作。
注意,由于批量更新没有事务控制,发生异常不会回滚之前的更新操作。所以批量更新的数据应具有相同的事务语义,否则可能导致数据不一致。