Hibernate 中批量處理資料

來源:互聯網
上載者:User

標籤:調用   date()   ges   批量   個數   add   object   exce   rest   

一、批量處理操作

批量處理資料是指在一個事務情境中處理大量資料。在應用程式中難以避免進行大量操作,Hibernate提供了以下方式進行批量處理資料:

(1)使用HQL進行大量操作     資料庫層面

(2)使用JDBC API進行大量操作  資料庫層面

(3)使用Session進行大量操作   會進緩衝

1.使用HQL進行大量操作

    HQL可以查詢資料,也可以批量插入、更新和刪除資料。HQL大量操作實際上直接在資料庫中完成,處理的資料不需要載入到Session緩衝中。使用Query介面的executeUpdate()方法執行用於插入、更新和刪除的HQL語句。

以Emp和Dept為例:

例:大量新增3個部門

        @Test    public void addTest(){        String hql="insert into Dept(deptName) select d.deptName||d.deptNo from Dept d where d.deptNo>0";        Query query=session.createQuery(hql);        int count=query.executeUpdate();        System.out.println("add ok!!");    }

輸出結果:

2.使用JDBC  API進行大量操作

    在Hibernate應用中使用JDBC API批量執行插入、修改和刪除語句時,需要使用Session的doWork(Work work)方法執行Work對象指定的操作,即調用Work對象的execute()方法。Session把當前使用的資料庫連接傳給execute()方法,執行持久化操作。

例:實現批量修改部門名稱

將部門編號大於3的修改為開發部

注意:該方式使用的串連依然是最初的連線物件,並且命令對象依然是根據串連建立的,注意這裡是SQL語句,不是HQL語句

  @Test    public void updateTest(){        final String sql="update Dept set deptname=? where deptno>?";        Work work=new Work(){            public void execute(Connection con) throws SQLException{                PreparedStatement ps = con.prepareStatement(sql);                            ps.setString(1,"開發部");                ps.setInt(2, 3);                                int count=ps.executeUpdate();                //System.out.println(count);            }        };        session.doWork(work);        System.out.println("update ok!!!");        }複製代碼

實現效果:

3、實現session進行大量操作

使用Session對象處理大量持久化對象,需及時從緩衝中清空已經處理完畢並且不會再訪問的對象。可以在處理完成一個對象或小批量對象後,調用flush()方法強制同步緩衝和資料庫,然後調用clear()方法清空緩衝。

例:大量新增15個員工

  /*     * session 實現大量新增15個員工     */        @Test    public void addSessionTest(){        for(int i=0;i<=15;i++){            Emp emp=new Emp();            emp.setEmpName("呵呵"+i);                        Dept dept=new Dept();            dept.setDeptNo(1);                        emp.setDept(dept);                        session.save(emp);                        if(i%10==0){                session.flush();                session.clear();            }        }        System.out.println("add ok!!");    }複製代碼

輸出結果:

二、HQL串連查詢

HQL提供的串連方式如下表所示:

內串連:

文法:

from Entity inner join Entity.property

例:使用內串連查詢員工隸屬的部門

list集合中的每個元素都是一個Object數組,from後面緊接的是部門 則輸出的先是部門的記憶體位址

    /*      * 內串連  員工隸屬的部門      */        @Test    public void innerTest(){                Query query=session.createQuery("from Dept d inner join d.emps");          List<Object[]> list = query.list();          for (Object[] item : list) {              //一個item就是一個數組             System.out.println(((Dept)item[0]).getDeptName()+"\t"+((Emp)item[1]).getEmpName());          }              }

輸出結果:

隱式內串連:

在HQL查詢語句中,如果對Emp類賦別名為”e”,可以通過e.dept.deptName的形式訪問dept對象的deptName屬性。使用隱式內串連按部門查詢員工資訊。

例:按部門條件查詢員工資訊

  /*     * 隱式內串連 按部門條件查詢員工資訊     */                @Test        public void hideTest(){                        Query query=session.createQuery("from Emp e where e.dept.deptName=‘開發部‘");              List<Emp> list = query.list();              for (Emp item : list) {                  //一個item就是一個數組                 System.out.println(item.getEmpName());              }        }        

輸出結果:

3、迫切內串連

例:查詢所有的僱員名稱和隸屬部門名稱  需使用關鍵字fetch

  /*         * 迫切內串連  查詢所有的僱員名稱和隸屬部門名稱          */                @Test        public void FetchTest(){            Query query=session.createQuery("from Dept d inner join fetch d.emps");            List<Dept> list=query.list();            for (Dept item : list) {                System.out.println(item.getDeptName()+"\t"+item.getEmps().iterator().next().getEmpName());            }        }複製代碼

 

Hibernate 中批量處理資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.