Hibernate中实现批量插入

批量插入数据会带来性能上的损耗,但是合理的设置会使性能得到最大的优化。我们来看一个批量插入的代码:

  Session session = sessionFactory.openSession();

  Transaction tx = session.beginTransaction();

  for ( int i=0; i<100000; i++ ) {

  Customer customer = new Customer(.....);

  session.save(customer); }

  tx.commit();

  session.close();

这个代码试图把1000000条customer记录批量插入到数据库,但是这会带来内存的溢出,因为hibernate在commit()之前,会将所有的数据放到缓存当中,当缓存满了以后自然就溢出了。所以经过改进,代码可以这么写:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
     Customer customer = new Customer(.....);
     session.save(customer);
     if ( i % 20 == 0 ) {
    //flush 插入数据和释放内存:
    session.flush(); session.clear(); }
}
tx.commit();
session.close();

 每次只插入20条记录,这样就不会造成内存的溢出了。

相关推荐