Java NamedParameterJdbcTemplate的update()和batchUpdate()方法之间的性能和限制问题
我想知道何时使用Spring framework的Java NamedParameterJdbcTemplate的update()和batchUpdate()方法之间的性能和限制问题,java,spring,Java,Spring,我想知道何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法 update()是否有行限制?有多少行可以处理update(),而不会出现性能问题或挂起我的数据库?从多少行开始batchUpdate()可以获得良好的性能 谢谢。以下是我的观点: 何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法 只要需要同时执
NamedParameterJdbcTemplate
类中的update()
或BactUpdate()
方法
update()
是否有行限制?有多少行可以处理update()
,而不会出现性能问题或挂起我的数据库?从多少行开始batchUpdate()
可以获得良好的性能
谢谢。以下是我的观点: 何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法 只要需要同时执行多个sql,就应该使用
bacthUpdate()
update()是否有任何行限制
这取决于您使用的DB。但我还没有达到更新的行限制。当然,更新几行要比更新许多行快。(例如,UPDATE…其中id=1
vsUPDATE…其中id>1
)
有多少行可以处理update(),而不会出现性能问题或挂起我的数据库
这还不确定。这取决于您使用的DB、机器性能等。如果您想知道确切的结果,可以查看DB供应商的基准测试,也可以通过一些测试进行测量
从batchUpdate()获得良好性能的行数开始
事实上,batchUpdate()
通常在执行批处理INSERT
、UPDATE
或DELETE
时使用,这将大大提高性能。例如:
批量插入:
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(employees.toArray());
int[] updateCounts = namedParameterJdbcTemplate.batchUpdate("INSERT INTO EMPLOYEE VALUES (:id, :firstName, :lastName, :address)", batch);
return updateCounts;
List<Object[]> batch = new ArrayList<Object[]>();
for (Actor actor : actors) {
Object[] values = new Object[] {
actor.getFirstName(),
actor.getLastName(),
actor.getId()};
batch.add(values);
}
int[] updateCounts = jdbcTemplate.batchUpdate(
"update t_actor set first_name = ?, last_name = ? where id = ?",
batch);
return updateCounts;
批量更新:
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(employees.toArray());
int[] updateCounts = namedParameterJdbcTemplate.batchUpdate("INSERT INTO EMPLOYEE VALUES (:id, :firstName, :lastName, :address)", batch);
return updateCounts;
List<Object[]> batch = new ArrayList<Object[]>();
for (Actor actor : actors) {
Object[] values = new Object[] {
actor.getFirstName(),
actor.getLastName(),
actor.getId()};
batch.add(values);
}
int[] updateCounts = jdbcTemplate.batchUpdate(
"update t_actor set first_name = ?, last_name = ? where id = ?",
batch);
return updateCounts;
List batch=new ArrayList();
for(演员:演员){
对象[]值=新对象[]{
actor.getFirstName(),
actor.getLastName(),
actor.getId()};
批处理。添加(值);
}
int[]updateCounts=jdbcTemplate.batchUpdate(
“更新t_actor set first_name=?,last_name=?其中id=?”,
批次);
返回更新计数;
在内部,batchUpdate()
将使用PreparedStatement.addBatch()
,您可以查看一些<代码>批处理操作在一个“批处理”中发送到数据库,而不是逐个发送更新。
一次性向数据库发送一批更新,比一个一个地发送更新,等待每个更新完成要快。发送一批更新(仅1次往返)所涉及的网络流量较少,数据库可能能够并行执行部分更新。此外,当您使用batchUpdate()
时,DB驱动程序必须支持批处理操作
,并且batchUpdate()
默认情况下不在一个事务中
您可以查看的更多详细信息:
希望你能帮忙