hibernate批量插入操作

来源:百度知道 编辑:UC知道 时间:2024/06/25 19:36:48
请问我想用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,请高手指教!谢谢!

是用循环,最后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;
}
方法大概是这样的,这段代码我没有运行过,你再注意一下结构吧。

For循环操作绝对可以达到你的目的,也就是存入多条数据,但是这种方法性能比较差。
常见的做法是批处理操作,也就是batch操作。如hibernate中的bulkUpdate就是一种批处理操作。这个方法可以接受一个Sql语句和一个对象数组,而此对象数组就是待操作的对象。
从底层看就是调用Jdbc的batch方法。有兴趣可以看一下。
此方法的性能要比For循环操作的方法高。
更多细节可以参考Hibernate Api。
希望这个能对你有所帮助。