zoukankan      html  css  js  c++  java
  • 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 sessionFactory=(SessionFactory) ac.getBean("sessionFactory");
            Session session=sessionFactory.openSession();        
            String hql="from User where id<=3";
            List<User> users=session.createQuery(hql).list();
            System.out.println("***************************************");
            for (User user: users) {
                System.out.println(user);
            }       
            session.close();       
        }
    
    }

    测试结果为:

    Hibernate:
    select
    user0_.id as id0_,
    user0_.name as name0_
    from
    mydb.user user0_
    where
    user0_.id<=3
    ***************************************
    User [id=1, name=LI]
    User [id=2, name=sara2]
    User [id=3, name=sara3]

    public class Test_query_iterator_list {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
            SessionFactory sessionFactory=(SessionFactory) ac.getBean("sessionFactory");
            Session session=sessionFactory.openSession();            
            String hql="from User where id<=3";
            Iterator<User> iterator=session.createQuery(hql).iterate();
            System.out.println("***************************************");
            while(iterator.hasNext()) {
                System.out.println(iterator.next());
            }        
            session.close();        
        }
    }

    输出结果为:

    Hibernate:
    select
    user0_.id as col_0_0_
    from
    mydb.user user0_
    where
    user0_.id<=3
    ***************************************
    Hibernate:
    select
    user0_.id as id0_0_,
    user0_.name as name0_0_
    from
    mydb.user user0_
    where
    user0_.id=?
    User [id=1, name=LI]
    Hibernate:
    select
    user0_.id as id0_0_,
    user0_.name as name0_0_
    from
    mydb.user user0_
    where
    user0_.id=?
    User [id=2, name=sara2]
    Hibernate:
    select
    user0_.id as id0_0_,
    user0_.name as name0_0_
    from
    mydb.user user0_
    where
    user0_.id=?
    User [id=3, name=sara3]

    结论:

      可以看出list每次都是通过一条语句直接操作数据库取出所有的数据返回(并且将对象存入hibernate缓存);iterator首先通过一条语句取出所有数据的id,然后通过id在hibernate的一级缓存中查找是否存在该对象,如果存在则直接取出,如果没有则再次发出一条sql语句通过id取得对象(并且加入到缓存中),这样如果所有的id在缓存中都没有的话就会出现n+1条sql语句的问题。

  • 相关阅读:
    excel经典图表
    excel数据透视表
    excel常用快捷键和技巧
    excel常用公式--时间序列类
    excel常用公式--计算统计类
    excel常用公式--逻辑运算类
    excel常用公式--关联匹配类
    FileWriter字符输出流和FileReader字符输出流
    FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式
    DataInputStream(二进制输入流)和DataOutputStream二进制输出流(注意:in是从本地文件输入到程序中,out是从程序输出到本地种)
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/5656030.html
Copyright © 2011-2022 走看看