hibernate的批量删除

一般而言,hibernate的批量删除的写法有两种,一种是hibernate内置的批量删除,不过他的批量删除是将每条记录逐一生成删除
语句,其效率极低,当然我们可以使用抓取策略给其进行优化,不过这只是亡羊补牢的方法,效率的提升依然不能让我们满意,很不推荐使用;
另一种是由"拼串"形成的HQL语句,其能够形成一条语句,从而是效率得到最大的提升;

我们先说"拼串"形式的写法:
个人使用是ssh,故此使用的是spring模板,如果单独使用hibernate,请增加事务与关闭session;

//一条删除语句的写法
public void del(int[] selectFlag) {
//数组中封装的是ID的集合;
String hql = “”;
for(int i=0;i<selectFlag.length;i++) {
if(i==0) {
hql = “id=”+selectFlag[i];
} else {
hql =hql + " or id="+selectFlag[i];
}
}
Session session= this.getSession();
Query q= session.createQuery("delete from User where "+hql);
q.executeUpdate();
}
此写法会形成一条HQL语句,得到最大的提升;

然后我们说下是hibernate内置的批量删除:

 调用dao层,并传递容器;

    /**
     * hibernate的批量删除;
     * 缺点:删除时是多条删除语句,影响效率;
     */
    List list = new ArrayList();
    for(int i=0;i<selectFlag.length;i++){
        User u= new User();
        u.setId(selectFlag[i]);
        list.add(u);    
    }
    dao.del(list);
    //调用DAO层的删除方法;
DAO层:

public void del(List list) {
this.getHibernateTemplate().deleteAll(list);
}
此种方法会发出多条的删除语句,影响效率极大;

https://www.cnblogs.com/yadongliang/p/8960739.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值