1.hibernate批量插入:
@Test
public void batchInsert1(){
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
for(int i=0;i<1000;i++){
Person person=new Person();
person.setAge(20+i);
person.setName("karl"+i);
session.save(person);
}
tx.commit();
HibernateUtil.closeSession();
}
这样的方式,所有的对象保存在session缓存中,如果批量插入的对象对量比较大,内存会溢出。
第二种方式:
@Test
public void batchInsert2(){
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
for(int i=0;i<1000;i++){
Person person=new Person();
person.setAge(20+i);
person.setName("karl"+i);
session.save(person);
if(i%20==0){
session.flush();
session.clear();
}
}
tx.commit();
HibernateUtil.closeSession();
}
把数据定量刷到数据库。
2.批量更新:
hibernate提供DML风格的批量操作.
@Test
public void batchUpdate(){
String hqlUpdate="update Person set name=:userName";
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
int entitiesCount=session.createQuery(hqlUpdate).setString("userName","newName").executeUpdate();
tx.commit();
session.close();
System.out.println(entitiesCount);
}
3.批量删除:
@Test
public void batchDel(){
String hqlUpdate="delete Person";
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
int entitiesCount=session.createQuery(hqlUpdate).executeUpdate();
tx.commit();
session.close();
System.out.println(entitiesCount);
}