批量插入数据会带来性能上的损耗,但是合理的设置会使性能得到最大的优化。我们来看一个批量插入的代码:
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条记录,这样就不会造成内存的溢出了。