for (int i = 0; i < xqList.size(); i++) {
Test test = xqList.get(i);
khDao.saveOrUpdate(test);
}
在DAO层有一段代码是这么写的,这样会造成程序特别的慢,要刷很多sql,请问这个该怎么优化好?
这段代码得主要问题是 在循环里与数据库交互,xqlist数据大约几十条,这样的话就与数据库交互几十次,所以非常影响性能,我希望各位给些意见,怎么能减少与数据库的交互
------解决方案--------------------
拼接好,最后一步 update
------解决方案--------------------
1.优化Hibernate,在配置文件中设置hibernate.jdbc.batch_size参数,来指定每次提交SQL的数量。
配置hibernate.jdbc.batch_size参数的原因就是尽量少读数据库,hibernate.jdbc.batch_size参数值越大,读数据库的次数越少,速度越快。
2、通过JDBC API来做批量插入,绕过Hibernate API。
// 方式2:批量提交
conn.setAutoCommit(false);
for(int i = 0; i++; i<10000) {
stmt.setString(1, "testName");
stmt.setString(2, "testAddress");
stmt.addBatch();
if (i % 100 == 0) {
stmt.executeBatch();
conn.commit();
}
}
stmt.executeBatch();
conn.commit();
------解决方案--------------------
拼接好sql语句后,用事务一次性提交吧
------解决方案--------------------
拼接SQL语句,一次提交。