Hibernate有批量的更新、删除,查询本身就是批量的。
下面是一个查询dao,供参考:
public List QueryFuction() {
List result = new ArrayList();
Session session = SessionFactory.getSession();
Transaction ts = null;
try {
String sql = "select * from table";
Query query = session.createQuery(sql);
ts = session.beginTransaction();
result = query.list();
ts.commit();
}catch(Exception e) {
if(ts!=null) ts.rollback();
e.printStackTrace();
}
finally {
SessionFactory.closeSession();
}
}
你用 id in(?,?,?,?);不就得咯 批量删除最好不用hql 使用qbc方式 session.createcriteria(); 然后再用expression.in("id",new integer(){.....}); 使用 where id in()的方式,快多了
Hibernate批量处理其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想,在实际使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库,主流台式机的配置,需要约30分钟,呵呵,晕倒.
总结下来有三种来处理以解决性能问题:
1:绕过Hibernate API ,直接通过 JDBC API 来做,这个方法性能上是比较好的。也是最快的.
2:运用存储过程。
3:还是用Hibernate API 来进行常规的批量处理,可以也有变,变就变在,我们可以在查找出一定的量的时候,及时的将这些数据做完操作就
删掉,session.flush();session.evict(XX对象集); 这样也可以挽救一点性能损失。这个“一定的量”要就要根据实际情况做定量参考了。一般为30-60左右,但效果仍然不理想.
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....