一:效率最不好的批量插入、更新。
二:hql批量插入、更新,效率较高,常用方法
//hql批量更新
public void batchUpdateByHql(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
String hqlUpdate = "update Person set name = :newName";
int updateEntites = session.createQuery(hqlUpdate)
.setString("newName", "yangui")
.executeUpdate();
session.flush();
ts.commit();
session.close();
sessionFactory.close();
}
//hql批量删除
public void batchDeleteByHql(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
String hqlDelete = "delete Person";
int updateEntites = session.createQuery(hqlDelete)
.executeUpdate();
session.flush();
ts.commit();
session.close();
sessionFactory.close();
}
//批量创建Person;批量创建一千个人到Person表中
public void batchSavePerson(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
Address address = new Address("河南省汝州市杨楼乡");
Person p;
for(int i=0; i < 3000; i++){
p = new Person();
p.setAddress(address);
p.setName("陈超阳"+i);
p.setAge(26);
session.save(p);
//20个清空session缓冲,防止内存溢出
if(i%20 == 0){
session.flush();
session.clear();
}
}
ts.commit();
session.close();
sessionFactory.close();
}
//批量更新;批量更新Person表中所有的记录
public void batchUpdatePerson(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
ScrollableResults persons = session.createQuery("from Person")
.setCacheMode(CacheMode.IGNORE)
.scroll(ScrollMode.FORWARD_ONLY);
int count = 0;
//遍历persons表中的全部记录
while(persons.next()){
Person p = (Person)persons.get(0);
p.setName("chenchaoyang" + count);
if(++count %20 == 0){
session.flush();
session.clear();
}
}
ts.commit();
session.close();
sessionFactory.close();
}
二:hql批量插入、更新,效率较高,常用方法
//hql批量更新
public void batchUpdateByHql(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
String hqlUpdate = "update Person set name = :newName";
int updateEntites = session.createQuery(hqlUpdate)
.setString("newName", "yangui")
.executeUpdate();
session.flush();
ts.commit();
session.close();
sessionFactory.close();
}
//hql批量删除
public void batchDeleteByHql(){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
String hqlDelete = "delete Person";
int updateEntites = session.createQuery(hqlDelete)
.executeUpdate();
session.flush();
ts.commit();
session.close();
sessionFactory.close();
}