hibernate批量插入、删除、更新。

一:效率最不好的批量插入、更新。
    //批量创建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();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值