zoukankan      html  css  js  c++  java
  • Hibernate-ORM:05.Hibernate中的list()和iterator()

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

    Hibernate中查多条(全部)使用list()或iterator()

    本篇介绍:

      1.如何使用list()和iterator();

      2.list()和iterator的相同处与区别

      3.缓存对list()或iterator的影响

    一,list()和iterator()的使用

      1.list():

        @Test
        /*简单的根据list查所有*/
        public void t1ListDemo01(){
            /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            List<Teacher> list = query.list();
            for(Teacher t : list){
                System.out.println(t);
            }
        }

      2.iterator()的使用

        @Test
        /*简单的根据iterate查所有*/
        public void t2IterateDemo01(){
            /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            Iterator<Teacher> iterate = query.iterate();
            while (iterate.hasNext()){
                iterate.next();
                System.out.println(iterate);
            }
        }

    二,list()和iterator()的相同不同

      1.相同

        查询所使用的hql都一致

        都是可以查多条记录

        都会保存到缓存中

      2.不同

        list()他不从缓存中拿值但是从数据库里查出来的值会保存一道在缓存中

        list()它会发送一条sql语句

        iterator()发送的sql语句的条数 =(1+记录数)

        iterator()不从缓存拿值但是之后的next()如果缓存中有值是会从缓存中拿值的

        next()发送的sql最多只有记录数那么多条sql

    三,验证缓存对list()和iterator()的影响,并且验证二的相同和不同

      1.看list()是否从缓存中拿值

        @Test
        /*看list走不走缓存*/
        public void t3ListCacheDemo01(){
            /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            List<Teacher> list = query.list();/*它在此处都会保存到缓存但是,它查的时候不查缓存*/
            for(Teacher t : list){
                System.out.println(t);
            }
    
    
            List<Teacher> list1 = query.list();
            for(Teacher t : list1){
                System.out.println(t);
            }
        }

       结论:不会

      2.看一下清除缓存是否对list()有影响

        @Test
        /*看list走不走缓存*/
        public void t4ListCacheDemo02(){
            /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            List<Teacher> list = query.list();/*它在此处都会保存到缓存但是,它查的时候不查缓存*/
            for(Teacher t : list){
                System.out.println(t);
            }
            /*清一下缓存*/
            session.clear();
    
            List<Teacher> list1 = query.list();
            for(Teacher t : list1){
                System.out.println(t);
            }
        }

       结论:不会有影响

      3.测试list()是否会保存数据到缓存中

        @Test
        /*测试list确实会保存到缓存*/
        public void t5ListCacheDemo03(){
            /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            List<Teacher> list = query.list();/*它在此处都会保存到缓存但是,它查的时候不查缓存*/
            for(Teacher t : list){
                System.out.println(t);
            }
            Teacher teacher = session.get(Teacher.class, 1);
        }

      结论:是的,他查询的时候不从缓存中查询,但是查完数据库会保存数据到缓存中一份

      4.测试iterator是否使用缓存,以及他后面的next()是否使用缓存

        @Test
        /*测试iterate是否使用缓存,以及next()是否使用缓存*/
        public void t6ListCacheDemo01(){
             /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            Iterator<Teacher> iterate = query.iterate();
            while (iterate.hasNext()){
                iterate.next();
                System.out.println(iterate);
            }
            Iterator<Teacher> iterate1 = query.iterate();
            while (iterate1.hasNext()){
                iterate1.next();
                System.out.println(iterate);
            }
        }
        @Test
        /*测试iterate是否使用缓存,以及next()是否使用缓存*/
        public void t7ListCacheDemo02(){
            Teacher teacher = session.get(Teacher.class, 1);
             /*创建hql*/
            String hql="from Teacher";
            Query query = session.createQuery(hql);
    
            Iterator<Teacher> iterate = query.iterate();
            while (iterate.hasNext()){
                iterate.next();
                System.out.println(iterate);
            }
    
        }

      结论:iterator不从缓存中拿值,但是next()确确实实是用缓存的

    作者:晨曦Dawn

    转载请注明出处,博客地址https://www.cnblogs.com/DawnCHENXI/p/9092424.html

    如果博客文章有错误,请指出,感激不尽!!!!!!!!!!!!!!!!!!

  • 相关阅读:
    【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
    【FICO系列】SAP FICO-模块 关于固定资产年结和折旧的问题
    【ABAP系列】SAP ABAP 刷新SCREEN的方法
    【ABAP系列】SAP ABAP 控制ALV单元格编辑后获取新的数值
    【ABAP系列】SAP ABAP系统变量及注释
    【EWM系列】SAP EWM凭证对象表概览
    【EWM系列】SAP EWM中仓库任务WT创建的函数
    教你快速录制gif动图
    阿里巴巴的26款超神Java开源项目!
    HTTP和HTTPS协议,看一篇就够了
  • 原文地址:https://www.cnblogs.com/DawnCHENXI/p/9092424.html
Copyright © 2011-2022 走看看