在hibernate中,一级缓存session和二级缓存,为编码提供了便利,同时也会有一些副作用。比如有批量插入或者更新操作的话,反而会降低效率。
解决方法:在hibernate中调用jdbc批量处理的API,使用原生的jdbc来进行批量操作。
public void setStatus(String arrMsgID[]) {
//sql语句
String updateSql = "UPDATE tb_msgboard SET status ='1' WHERE msgID =?";
//通过session获取事务
Transaction ts = session.beginTransaction();
session.doWork(
//实现work接口,work接口中有一个execute方法,connection就是这个方法的参数,也就是在这里获得jdbc的connection
new Work(){
@Override
public void execute(java.sql.Connection connection) throws SQLException {
try {
PreparedStatement stmt = connection.prepareStatement(updateSql);
//这里进行批量操作
for (int i = 0; i < arrMsgID.length; i++) {
stmt.setString(1, arrMsgID[i]);
stmt.addBatch(); // 添加到批处理命令
}
stmt.executeBatch();
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
session.close();
}
}
});
session.close();
}