getHibernateTemplate 批量添加数据及简单测试

时间:2022-10-17 00:10:16

最近做的一个项目中,需要从execl中读取数据,然后保存到数据库中。以前,数据量小的时候,都是读一行,插入一行。但这次Execl中有上万条数据,每条数据还要去数据库中查询对比,所以时间更费时间,用原来的笨方法,时间太长了,无法忍受。后采用HibernateTemplate回调Hibernate的API函数,执行批量插入操作。

            getHibernateTemplate().execute(new HibernateCallback<Object>() {

@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
session.beginTransaction();
for (data d : tempList) {
session.save(d);
}
session.getTransaction().commit();
session.flush();
session.clear();
return null;
}

});

在配置文件中设置hibernate 批量插入的大小:

<prop key="hibernate.jdbc.batch_size">50</prop>

为了验证下,插入次数和速度有没有什么关系,做了个简单测试。(每条数据加入到session之前,需要去数据库中的另外一个表中做查询对比,所以这个实验说明有限)

数据量为 16277

第一次设置hibernate 每次批量插入数量为100,

则时间为

开始时间 :11 Sep 2015 08:26:06 GMT
结束时间 :11 Sep 2015 08:47:10 GMT

总时间为 21分钟左右。


第二次设置 每次批量插入的20,

开始时间 :11 Sep 2015 08:57:59 GMT
结束时间 :11 Sep 2015 09:20:19 GMT

总时间为 23分钟左右。

总体看来,简单提高批量插入的数量,对于降低时间也是有限的。