query.list()和query.iterate()区别

来源:互联网 发布:eclipse的java程序编码 编辑:程序博客网 时间:2024/06/01 10:17

     list方法返回的是结果集的list集合,iterate返回的是iterator迭代器。

     list方法查询所有记录只发送一条sql语句,select * from 表名

     iterate方法查询所有记录的话,先查询到满足条件的所有记录id,并不立即查询所有结果,当我们有用到某个记录的话,他才查询。如果显示所有记录的话需要n+1条sql语句。第一条查id,接下去根据id,一条一条查询,所以是n+1条。

    list方法缓存中有记录了,他还是会发生sql语句到数据库中查询。

   iterate方法缓存中有记录了,他只发送一条查符合条件的id的sql语句。

   先看看list方法。

   

[java] view plain copy
  1. Session session =DBUtil.getSession();  
  2.     String hql ="from Deptment" ;  
  3.    Query query = session.createQuery(hql);  
  4.    System.out.println("第一次查询");  
  5.    List list1 = query.list();  
  6.    Iterator iter1 = list1.iterator();  
  7.    while(iter1.hasNext())  
  8.    {  
  9.     System.out.println( iter1.next());  
  10.    }  
  11.      
  12.    System.out.println("第二次查询");  
  13.    List list2 = query.list();  
  14.    Iterator iter2 = list2.iterator();  
  15.    while(iter2.hasNext())  
  16.    {  
  17.     System.out.println( iter2.next());  
  18.    }  
  19. session.close();  

   结果:  

[java] view plain copy
  1. 第一次查询  
  2. Hibernate: select deptment0_.DEPTID as DEPTID0_, deptment0_.DEPTNAME as DEPTNAME0_ from SCOTT.DEPTMENT deptment0_  
  3. Deptment [deptid=2, deptname=sdsdzz]  
  4. Deptment [deptid=3, deptname=sdsdzz]  
  5. Deptment [deptid=4, deptname=sdsdzz]  
  6. Deptment [deptid=1, deptname=a]  
  7. 第二次查询  
  8. Hibernate: select deptment0_.DEPTID as DEPTID0_, deptment0_.DEPTNAME as DEPTNAME0_ from SCOTT.DEPTMENT deptment0_  
  9. Deptment [deptid=2, deptname=sdsdzz]  
  10. Deptment [deptid=3, deptname=sdsdzz]  
  11. Deptment [deptid=4, deptname=sdsdzz]  
  12. Deptment [deptid=1, deptname=a]  

   iterate()方法

[java] view plain copy
  1. Session session =DBUtil.getSession();  
  2.     String hql ="from Deptment" ;  
  3.    Query query = session.createQuery(hql);  
  4.    System.out.println("第一次查询");  
  5.      
  6.    Iterator iter1 = query.iterate();  
  7.    while(iter1.hasNext())  
  8.    {  
  9.     System.out.println( iter1.next());  
  10.    }  
  11.      
  12.    System.out.println("第二次查询");  
  13.    Iterator iter2 =  query.iterate();  
  14.    while(iter2.hasNext())  
  15.    {  
  16.     System.out.println( iter2.next());  
  17.    }  
  18. session.close();  

  结果:

[java] view plain copy
  1. 第一次查询  
  2. Hibernate: select deptment0_.DEPTID as col_0_0_ from SCOTT.DEPTMENT deptment0_  
  3. Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?  
  4. Deptment [deptid=1, deptname=a]  
  5. Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?  
  6. Deptment [deptid=2, deptname=sdsdzz]  
  7. Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?  
  8. Deptment [deptid=3, deptname=sdsdzz]  
  9. Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?  
  10. Deptment [deptid=4, deptname=sdsdzz]  
  11. 第二次查询  
  12. Hibernate: select deptment0_.DEPTID as col_0_0_ from SCOTT.DEPTMENT deptment0_  
阅读全文
0 0