用户登录
用户注册

分享至

hibernate批量查询

  • 作者: 喂---出来啦
  • 来源: 51数据库
  • 2021-01-15
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左右,但效果仍然不理想.
软件
前端设计
程序设计
Java相关