>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29438 个阅读者 刷新本主题
 * 贴子主题:  Hibernate中的list()和iterator() 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2018-06-13 03:06:52     消息  查看  搜索  好友  邮件  复制  引用

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






程序猿的技术大观园:www.javathinker.net

  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->使用JPA和注解
  Java网络编程-->用Axis发布Web服务
  精通Spring-->组合(Composition)API
  Vue3开发-->通过Axios访问服务器
  SpringCloud Feign的分析
  git 仓库常用指令
  99%的人都能看懂的“熔断”以及最佳实践
  使用Spring MVC处理404错误的方法
  Spring的方法拦截器范例
  Spring MVC数据验证
  Redis的漏洞利用,原来大佬都是这样操作的
  什么是Redis?Redis的各项功能解决了哪些问题?
  聊聊Spring Cloud版本的那些事儿
  从零搭建一个基于 ELK 的日志、指标收集与监控系统
  开发一个Java项目的基本流程
  中央厨房订单管理系统,引入ActiveMQ消息队列,平滑处理高峰...
  Spring入门基础知识
  springboot —— 多数据源
  MyBatis解析和运行原理
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 nihaota 
  
威望: 0
级别: 新手上路
魅力: 1315
经验: 1315
现金: 2944
发文章数: 243
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


讨债公司
发文章时间 2022-10-28 21:45:58
 IPIP: 已设置保密 1 楼     
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。