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

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

最近做的一个项目中,需要从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分钟左右。

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



hibernateTemplate批量删除数据 对于Hiberante对数据库数据删除操作的归纳 立即下载

相关推荐

HibernateTemplate汇总

spring HibernateTemplate汇总

Hibernate批处理操作优化 (批量插入、更新与删除)

我开发的网站加了个新功能:需要在线上处理表数据批量合并和更新,昨天下午发布上线,执行该功能后,服务器的load突然增高,变化曲线异常,SA教育了我一番,让我尽快处理,将CPU负载降低。 工作所需,我经常要写些程序批量处理数据,每次执行几十万数据处理的时候,我机子的CPU都会飙高,而且数据处理速度会越来越慢。比如第一个1W条要5分钟,第二个1W条就要10分钟,要干其他事情的时候机子也卡的不行

黑鹰 1547

Hibernate实现批量添加数据的方法

主要介绍了Hibernate实现批量添加数据的方法,详细分析了基于Hibernate执行批量添加操作的具体步骤与相关实现代码,需要的朋友可以参考下

Gethibernatetemplate的查询更新以及批量操作方法

一、find(String queryString);      示例:this.getHibernateTemplate().find("from bean.User");      返回所有User对象   二、find(String queryString , Object value);      示例:this.getHibernateTemplate().find("

sinat_24928447的博客 2779

Hibernate 批量插入、更新与删除

批量插入 在项目的开发过程之中,由于项目需求,我们常常需要把大批量数据插入到数据库。数量级有万级、十万级、百万级、甚至千万级别的。如此数量级别的数据Hibernate做插入操作,就可能会发生异常,常见的异常是OutOfMemoryError(内存溢出异常)。 首先,我们简单来回顾一下Hibernate插入操作的机制。Hibernate要对它内部缓存进行维护,当我们执行插入操作时,就

张波的技术积累 1337

Hibernate getHibernateTemplate().execute实现批量删除

最近用ssh框架遇到批量删除问题,如果用getHibernateTemplate().deleteAll()方法进行删除会为每条数据生成一条delete语句,效率极低,而且dileteAll()方法的参数是对象,如果我只传了id只能先获取了再删。 而用getHibernateTemplate().execute()方法通过自定义hql删除效率快而且只需要id就够了 代码 /** * ...

咸鱼一条 2134

java hibernate 插入数据_hibernate 批量插入数据

如题,有两种方法1)使用FLUSH2)使用JDBC分别来解释:1)hibernate在进行数据库操作的时候,都要有事务支持的。可能你曾遇到过,没有加事务,程序会报错的情况。而事务每次提交的时候,都会和数据库交互,即让数据库执行SQL语句。在说到hibernate中的save() 或者saveOrUpdate()方法,其实,它们都是利用hibernate的一级缓存,在事务没有提交的时候,所有对象,并...

weixin_33045057的博客 1066

hibernate插入数据测试无异常,但数据库没有数据

解决方法: spring test测试默认会将事务回滚,如果想阻止spring transactional回滚,在test方法上加注解@Rollback(false)即可。 Hibernate hql getHibernateTemplate()常用方法汇总 getHibernateTemplate 批量添加数据简单测试 转载于:https://www.cnblogs.com/cod...

weixin_30500289的博客 409

gethibernatetemplate的find方法

为什么使用gethibernatetemplate的find方法 ?   一般我们 访问数据库  有两种选择 :  getSession().createQuery("from Area"); getHibernateTemplate().find( "FROM Area);     通过测试: 分别循环调用getSession().createQuery("fromUsers

hui12669的专栏 698

gethibernatetemplate的find方法使用说明

为什么使用gethibernatetemplate的find方法 ?      一般我们 访问数据库  有两种选择 :  getSession().createQuery("from Area"); getHibernateTemplate().find( "FROM Area);       一般我们 访问数据库  有两种选择 :  getSession().crea

ZKLxuankai的专栏 1389

getHibernateTemplate().find()方法

find(String queryString, Object[] values);  这个方法后者的参数必须是一个数组,而不能是一个List。 List ul=getHibernateTemplate().find("from User u where u.user

方逸涛的专栏 3万+

getSession getHibernateTemplate用哪个?

在Spring整合 Hibernate中,对dao层访问中提供了两个操作。Session org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession() throws DataAccessResourceFailureException, IllegalStateException Session

jianw2007的专栏 4420

getHibernateTemplate().saveOrUpdate()和getHibernateTemplate().save()不起作用 数据库没有数据

最近复习了一把SSH,碰到一个问题,在将hibernate交给spring管理并配置好事务后,进行了一个小测试,结果发现getHibernateTemplate().saveOrUpdate()和getHibernateTemplate().save()不起作用,执行后hibernate打印了sql语句,并且获得了页面传到Action 的数据,可是到数据库检查就是没有新添加数据,修改的数据也没有

seed227的专栏 3554

getHibernateTemplate().save(bean)无法成功保存数据的问题

今天在进行spring整合hibernate的时候进行一个小测试,想要通过getHibernateTemplate().save()方法来存储对象进入数据库 public class UserDao extends HibernateDaoSupport{ public UserDao () {} public void save(User user) { getHibernateTe...

qq_37322081的博客 1348

getHibernateTemplate().find()及带参使用方法

转自:http://blog.sina.com.cn/s/blog_4586764e0100s157.html find(String queryString, Object[] values);  这个方法后者的参数必须是一个数组,而不能是一个List。 List ul=getHibernateTemplate().find("from User u where u.usernam

Seemyc的博客 1681

getHibernateTemplate()和getSession()区别

getHibernateTemplate()和getSession()区别(转) 在Spring整合 Hibernate中,对dao层访问中提供了两个操作。   (1)protected final Session getSession() throws DataAccessResourceFailureException,IllegalStateException; sp

Junit的博客 470

getSession 和 getHibernateTemplate用哪个?

在Spring整合 Hibernate中,对dao层访问中提供了两个操作。Session org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession() throws DataAccessResourceFailureException, IllegalStateExceptionSession org.springframework.orm.hibernate3.support.HibernateDaoSupport.

Mr. David 专栏 3265
上一篇: Java 通过反射的方式应用
下一篇: angularjs学习 过滤器(filter)
君君大虾
博客等级 码龄16年 8粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值