我正在比较旧方式和使用 Hibernate 之间的数据库“更新”性能。
这是我的数据库结构:文档 -> 代码 -> Code_Details。父表和子表之间存在一对多的关系。
现在我有大约 850 个 Code_Details 条目需要在数据库中更新。
下面是旧方法,它的执行速度是原来的两倍:
public void executeDBUpdate(int status1, int status2, int status3){
...
...
java.sql.Statement statement = connection.createStatement();
statement.executeUpdate("update Code_Details set status1="+status1+", status2"+=status2+", status3="+status3");
...
}
以下是休眠版本:
public void executeDBUpdate(int status1, int status2, int status3){
...
...
Query query = session.createQuery("update Code_Details set status1=:status1, status2=:status2,status3=:status3);
query.setParameter("status", status_);
query.setParameter("status1",status1);
query.setParameter("status2",status2);
query.setParameter("status3",status3);
query.executeUpdate();
HibernateUtils.commitTransaction("emscribedx");
...
}
请注意,在这两个版本中,我的“executeDBUpdate(int,int,int)”方法被调用了 850 次以执行每个数据库更新。
以旧方式执行这 850 次更新的总时间为:
954 milliseconds
使用 Hibernate 执行相同的 850 次更新的总时间是:
1979 milliseconds
我将其分解并注意到 Hibernate 版本中的大部分时间都在“query.executeUpdate()”-> 954 毫秒和“hibernateTransaction.commit()”-> 750 毫秒。
执行大量更新时如何提高 Hibernate 性能?