1. 批量插入
Hibernate的Session持有一个必选的一级缓存,数据操作的时候都将在Session级别的缓存区进行缓存。如果同时操作的数据量太大,将会抛出OutOfMemoryException异常(内存溢出)。所以,我们可以定时将Session缓存的数据刷入数据库,而不是一直在Session级别缓存。如下:
public class PersonManager{
public static void main(String[] args){
PersonManager mgr = new PersonManager();
mgr.testPerson();
HibernateUtil.sessionFactory.close();
}
private void testPerson(){
Session session = HibernateUtil.currentSession(); //HibernateUtil类如前面博客 Hibernate的映射(集合)
Transaction tx = session.beginTransaction();
//创建一个Person对象
for(int i=0;i< 10000;i++){
Person p = new Person();
p.setName("Name"+i);
session.save(p);
//每当累加器是20的倍数时,将Session中数据刷入数据库,并清空Session缓存
if(i%20 ==0){
session.flush();
session.clear();
}
}
tx.commit();
HibernateUtil.closeSession();
}
}
2. DML风格的批量更新
public class PersonManager{
public static void main(String[] args){
PersonManager mgr = new PersonManager();
mgr.testPerson();
HibernateUtil.sessionFactory.close();
}
private void testPerson(){
Session session = HibernateUtil.currentSession(); //HibernateUtil类如前面博客 Hibernate的映射(集合)
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Person set name=:newName";
int updatedEntities = session.createQuery(hqlUpdate).setString("newName", "新名字").executeUpdate();
tx.commit();
HibernateUtil.closeSession();
}
}
3. DML风格的批量删除
public class PersonManager{
public static void main(String[] args){
PersonManager mgr = new PersonManager();
mgr.testPerson();
HibernateUtil.sessionFactory.close();
}
private void testPerson(){
Session session = HibernateUtil.currentSession(); //HibernateUtil类如前面博客 Hibernate的映射(集合)
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Person";
int deletedEntities = session.createQuery(hqlDelete).executeUpdate();
tx.commit();
HibernateUtil.closeSession();
}
}