• hibernate的批量删除


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

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

    1. //一条删除语句的写法
    2.     public void del(int[] selectFlag) {
    3.     //数组中封装的是ID的集合;
    4.         String hql = "";
    5.         for(int i=0;i<selectFlag.length;i++) {
    6.             if(i==0) {
    7.                 hql = "id="+selectFlag[i];
    8.             } else {
    9.                 hql =hql + " or id="+selectFlag[i];
    10.             }
    11.         }   
    12.         Session session= this.getSession();
    13.         Query q= session.createQuery("delete from User where "+hql);
    14.         q.executeUpdate();
    15.     }

        此写法会形成一条HQL语句,得到最大的提升;


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

         调用dao层,并传递容器;

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

        DAO层:

    1. public void del(List list) {
    2.         this.getHibernateTemplate().deleteAll(list);
    3.     }

        此种方法会发出多条的删除语句,影响效率极大;

  • 相关阅读:
    bootstrap 按钮 文本 浮动 隐藏
    bootstrap 表单控件 控件状态 控件大小 help-block
    wps 操作
    SSH中的免password登录
    Qt音乐播放器制作(二)Easy Player
    云计算资源分享与下载
    uva11059(最大乘积)
    两小时搞定C#版超级战舰游戏
    数据库中的參照完整性(Foreign Key)
    动手解决困扰自己的事情——记屏蔽网页广告
  • 原文地址:https://www.cnblogs.com/yadongliang/p/8960739.html
Copyright © 2020-2023  润新知