Hibernate三種批量處理數據


   

    概念:批量處理數據是指在一個事務場景中處理大量數據。

在應用程序中難以避免進行批量操作,Hibernate提供了以下方式進行批量處理數據:

(1)使用HQL進行批量操作  數據庫層面  executeUpdate()

(2)使用JDBC API進行批量操作  數據庫層面

(3)使用Session進行批量操作   會進緩存

1.使用HQL進行批量操作

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

01.批量插入數據

復制代碼
    @Test
//03.HQL 批量添加 public void multiInsertTest(){ String hql="insert into Dept(deptName) select d.deptName||d.deptNo from Dept d where d.deptNo>0"; session.createQuery(hql).executeUpdate(); }
復制代碼

02.批量修改

復制代碼
 @Test
    //03.HQL 批量修改
    public void multiUpdateTest(){
        String hql="update Dept set deptName=:name where deptNo>2";
        session.createQuery(hql).setParameter("name","財務部").executeUpdate();
    }
復制代碼

03.批量刪除

復制代碼
 @Test
    //03.HQL 批量刪除
    public void multiDeleteTest(){
        String hql="delete from Dept d where d.deptNo>:deptNo";
        session.createQuery(hql).setParameter("deptNo",20).executeUpdate();
    }
復制代碼

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

復制代碼
 @Test
    //04.JDBC API 批量修改
    public void insertTest(){
        Work work=new Work() {
            public void execute(Connection connection) throws SQLException {
                PreparedStatement ps = connection.prepareStatement("update DEPT  set deptName='業務部'where DEPTNO>?");
                ps.setInt(1,1);
                ps.executeUpdate();
            }
        };
        //session
        session.doWork(work);
    }
復制代碼

操作前:                                 操作后:

注意:該方式使用的連接依然是最初的連接對象,並且命令對象依然是根據連接創建的,注意這里是SQL語句,不是HQL語句

3.使用Session進行批量操作

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

復制代碼
 @Test
public void testAdd(){ Emp emp=null; for (int i = 0; i < 10000; i++) { emp=new Emp(i, "emp"+i); session.save(emp); if (i%30==0) { session.flush(); session.clear(); } } }


免責聲明!

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



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