BatchPreparedStatementSetter是JdbcTemplate的一个接口,用于设置批量处理的PreparedStatement的参数。
作用是批量设置参数值,来执行批量更新操作,这可以提高性能,减少数据库请求次数。
使用步骤如下:
1、 定义实现BatchPreparedStatementSetter接口的类:
public class UserBatchSetter implements BatchPreparedStatementSetter {
private List<User> users;
public UserBatchSetter(List<User> users) {
this.users = users;
}
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
}
public int getBatchSize() {
return users.size();
}
}
- 实现setValues()方法,用于为每条记录设置参数值
- getBatchSize()方法返回批量 size
2、 执行批量更新,传入SQL语句、BatchPreparedStatementSetter实现和batchSize:
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
int[] counts = jdbcTemplate.batchUpdate(sql, new UserBatchSetter(users), 100);
- batchUpdate()执行批量更新,这里一次提交100条记录
- counts返回每个批次的受影响行数
3、 JdbcTemplate会将传入的List拆分为多个批次提交,每100条执行一次,这减少了网络开销,提高性能。
相比非批量方式,批量操作可以提高性能3个数量级左右,所以对于高频插入或更新场景,批量方式是首选。
JdbcTemplate通过提供batchUpdate()方法和BatchPreparedStatementSetter接口,简化了批量更新操作,这也增加了框架的处理效率和吞吐量。