Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NamedParameterJdbcTemplate的update()和batchUpdate()方法之间的性能和限制问题_Java_Spring - Fatal编程技术网

Java NamedParameterJdbcTemplate的update()和batchUpdate()方法之间的性能和限制问题

Java NamedParameterJdbcTemplate的update()和batchUpdate()方法之间的性能和限制问题,java,spring,Java,Spring,我想知道何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法 update()是否有行限制?有多少行可以处理update(),而不会出现性能问题或挂起我的数据库?从多少行开始batchUpdate()可以获得良好的性能 谢谢。以下是我的观点: 何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法 只要需要同时执

我想知道何时使用Spring framework的
NamedParameterJdbcTemplate
类中的
update()
BactUpdate()
方法

update()
是否有行限制?有多少行可以处理
update()
,而不会出现性能问题或挂起我的数据库?从多少行开始
batchUpdate()
可以获得良好的性能


谢谢。

以下是我的观点:

何时使用Spring framework的NamedParameterJdbcTemplate类中的update()或BactUpdate()方法

只要需要同时执行多个sql,就应该使用
bacthUpdate()

update()是否有任何行限制

这取决于您使用的DB。但我还没有达到更新的行限制。当然,更新几行要比更新许多行快。(例如,
UPDATE…其中id=1
vs
UPDATE…其中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()
默认情况下不在一个事务中

您可以查看的更多详细信息:

希望你能帮忙