hibernate批量插入操作
请问我想用hibernate数据库表做映射,执行插入数据操作的时候,如果想向一个表同时存入10000条数据,try{tx=session.beginTransaction...
请问我想用hibernate数据库表做映射,执行插入数据操作的时候,如果想向一个表同时存入10000条数据,
try {
tx = session.beginTransaction();
UserInfo u = new UserInfo();
u.setUserName("FuJingZhou");
u.setPassword("123");
System.out.println("开始插入数据到数据库……");
session.save(u);
tx.commit();
tx = null;
}
。。。
是将以上部分做循环么?刚接触hibernate,请高手指教!谢谢! 展开
try {
tx = session.beginTransaction();
UserInfo u = new UserInfo();
u.setUserName("FuJingZhou");
u.setPassword("123");
System.out.println("开始插入数据到数据库……");
session.save(u);
tx.commit();
tx = null;
}
。。。
是将以上部分做循环么?刚接触hibernate,请高手指教!谢谢! 展开
2个回答
展开全部
是用循环,最后commit,但是要注意不能一次过循环save10000条数据再commit,因为这样会使Hibernate的一级缓存爆满导致内存溢出的异常,所以每隔100条记录就commit一次吧,Hibernate的二级缓存会决定该什么时候提交以实现批量插入的高效率的。
try {
tx = session.beginTransaction();
for(int i=0;i<=10000;i++)
{
UserInfo u = new UserInfo();
u.setUserName("FuJingZhou");
u.setPassword("123");
session.save(u);
if(i%100||i==10000)
{
tx.commit();
if(i<10000)
tx = session.beginTransaction();
}
}
tx = null;
}
方法大概是这样的,这段代码我没有运行过,你再注意一下结构吧。
try {
tx = session.beginTransaction();
for(int i=0;i<=10000;i++)
{
UserInfo u = new UserInfo();
u.setUserName("FuJingZhou");
u.setPassword("123");
session.save(u);
if(i%100||i==10000)
{
tx.commit();
if(i<10000)
tx = session.beginTransaction();
}
}
tx = null;
}
方法大概是这样的,这段代码我没有运行过,你再注意一下结构吧。
展开全部
For循环操作绝对可以达到你的目的,也就是存入多条数据,但是这种方法性能比较差。
常见的做法是批处理操作,也就是batch操作。如hibernate中的bulkUpdate就是一种批处理操作。这个方法可以接受一个Sql语句和一个对象数组,而此对象数组就是待操作的对象。
从底层看就是调用Jdbc的batch方法。有兴趣可以看一下。
此方法的性能要比For循环操作的方法高。
更多细节可以参考Hibernate Api。
希望这个能对你有所帮助。
常见的做法是批处理操作,也就是batch操作。如hibernate中的bulkUpdate就是一种批处理操作。这个方法可以接受一个Sql语句和一个对象数组,而此对象数组就是待操作的对象。
从底层看就是调用Jdbc的batch方法。有兴趣可以看一下。
此方法的性能要比For循环操作的方法高。
更多细节可以参考Hibernate Api。
希望这个能对你有所帮助。
参考资料: Hibernate Api
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询