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]

query.list()和query.iterate()区别,布布扣,bubuko.com

时间: 2024-10-10 02:23:33

query.list()和query.iterate()区别的相关文章

dojo 学习笔记之dojo.query - query(id) 与query(class)的区别

考虑这个例子:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每个listitem中都生成一个按钮button. 如果想要给每个按钮都绑定一个click事件,用dojo.query来获取这些button是比较方便的. 这样做的时候我遇到一个问题, 在create这些button的循环语句中我给每个button 定义了id = "somebtn" . 然后试图用var btnlist = dojo.query("#somebtn")

hibernate中Query的list和iterator区别(续)

打开cache后query的list和iterator方法区别 1.ehcache.xml文件 <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

Hibernate5-投影查询,分组查询,Query的List和Iterate

1.创建项目,项目名称hibernatedemo9,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示 4.实体Bean Forum的内容如下 package com.mycompany.demo.bean; public class Forum { private int fid; private String name; private int issh

vue 路由传参 params 与 query两种方式的区别

初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query.然后,错误就这么来了:  router文件下index.js里面,是这么定义路由的: { path:"/detail", name:"detail", component:home } 我想用params来传参,是这么写的,嗯~ this.$router.push({ path:"/detail", params:{ name:'nameV

SQLAlchemy中Model.query和session.query(Model)的区别

我们使用Flask 0.11.1,Flask-SQLAlchemy 2.1使用PostgreSQL作为DBMS. 示例使用以下代码更新数据库中的数据: entry = Entry.query.get(1) entry.name = 'New name' db.session.commit() 从Flask shell执行时,这完全正常,因此数据库已正确配置.现在,我们的控制器用于更新条目,略微简化(没有验证和其他样板),如下所示: def details(id): entry = Entry.q

hibernate中Query的list和iterator区别

1.Test_query_list类 public class Test_query_iterator_list { public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); SessionFactory sessionFact

使用Retrofit时出现 java.lang.IllegalArgumentException: URL query string &quot;t={type}&amp;p={page}&amp;size={count}&quot; must not have replace block. For dynamic query parameters use @Query.异常原因

/** * Created by leo on 16/4/30. */ public interface GanchaiService { @GET("digest?t={type}&p={page}&size={count}") Call<List<GanChaiEntry>> ListGanchaiEntry(@Path("type") int type , @Path("count") int cou

dojo 学习笔记之dojo.query - query(id) 与query(class)的差别

考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用dojo.query来获取这些button是比較方便的. 这样做的时候我遇到一个问题, 在create这些button的循环语句中我给每一个button 定义了id = "somebtn" . 然后试图用var btnlist = dojo.query("#somebtn"

Hibernate中HQL语句中list与iterate区别

session.createQuery("from Classes").list() session.createQuery("from Classes").iterate(); 这两者有什么区别    *  发出sql语句的不同    *  利用缓存的不同