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.     }

    此種方法會發出多條的刪除語句,影響效率極大;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM