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

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

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

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

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

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

   先看看list方法。

   

    	Session session =DBUtil.getSession();
     	String hql ="from Deptment" ;
        Query query = session.createQuery(hql);
        System.out.println("第一次查询");
        List list1 = query.list();
        Iterator iter1 = list1.iterator();
        while(iter1.hasNext())
        {
        	System.out.println( iter1.next());
        }
        
        System.out.println("第二次查询");
        List list2 = query.list();
        Iterator iter2 = list2.iterator();
        while(iter2.hasNext())
        {
        	System.out.println( iter2.next());
        }
    	session.close();

   结果:

   

第一次查询
Hibernate: select deptment0_.DEPTID as DEPTID0_, deptment0_.DEPTNAME as DEPTNAME0_ from SCOTT.DEPTMENT deptment0_
Deptment [deptid=2, deptname=sdsdzz]
Deptment [deptid=3, deptname=sdsdzz]
Deptment [deptid=4, deptname=sdsdzz]
Deptment [deptid=1, deptname=a]
第二次查询
Hibernate: select deptment0_.DEPTID as DEPTID0_, deptment0_.DEPTNAME as DEPTNAME0_ from SCOTT.DEPTMENT deptment0_
Deptment [deptid=2, deptname=sdsdzz]
Deptment [deptid=3, deptname=sdsdzz]
Deptment [deptid=4, deptname=sdsdzz]
Deptment [deptid=1, deptname=a]

   iterate()方法

  

    	Session session =DBUtil.getSession();
     	String hql ="from Deptment" ;
        Query query = session.createQuery(hql);
        System.out.println("第一次查询");
        
        Iterator iter1 = query.iterate();
        while(iter1.hasNext())
        {
        	System.out.println( iter1.next());
        }
        
        System.out.println("第二次查询");
        Iterator iter2 =  query.iterate();
        while(iter2.hasNext())
        {
        	System.out.println( iter2.next());
        }
    	session.close();

  结果:

  

第一次查询
Hibernate: select deptment0_.DEPTID as col_0_0_ from SCOTT.DEPTMENT deptment0_
Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?
Deptment [deptid=1, deptname=a]
Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?
Deptment [deptid=2, deptname=sdsdzz]
Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?
Deptment [deptid=3, deptname=sdsdzz]
Hibernate: select deptment0_.DEPTID as DEPTID0_0_, deptment0_.DEPTNAME as DEPTNAME0_0_ from SCOTT.DEPTMENT deptment0_ where deptment0_.DEPTID=?
Deptment [deptid=4, deptname=sdsdzz]
第二次查询
Hibernate: select deptment0_.DEPTID as col_0_0_ from SCOTT.DEPTMENT deptment0_
Deptment [deptid=1, deptname=a]
Deptment [deptid=2, deptname=sdsdzz]
Deptment [deptid=3, deptname=sdsdzz]
Deptment [deptid=4, deptname=sdsdzz]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值