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

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

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

转载于:https://www.cnblogs.com/DawnCHENXI/p/9092424.html

Hibernate-ORM:05.Hibernate中的list()和iterator()相关推荐

  1. Hibernate ORM框架学习日记基础篇-1

    一.简介 Hibernate是轻量级Java EE应用的持久层解决方案,不仅管理Java类库到数据库表的映射,还提供数据查询和获取数据的 方法,它完成对象模型和基于SQL的关系模型的映射关系,使得开发 ...

  2. hibernate里的generator中class =value介绍

    在*.hbm.xml必须声明的<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识. <generator class="sequenc ...

  3. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  4. eclipse学习(第三章:ssh中的Hibernate)——7.Hibernate使用注释开发

    eclipse学习(第三章:ssh中的Hibernate)--7.Hibernate中的注释 前言 项目实践 1.初始化项目及jar包拉取 2.mysql数据结构 3.创建hibernate.cfg. ...

  5. Hibernate 异常org.hibernate.LazyInitializationException: could not initialize prox

    Hibernate的Lazy初始化1:n关系时,必须保证是在同一个Session内部使用这个关系集合,不然Hiernate将抛出异常. 两种处理方法: 一.这是延时加载的问题,把有关联的所有pojo类 ...

  6. Hibernate复习之Hibernate基本介绍

    众所周知.眼下流行的面向对象的对象关系映射的Java持久层框架有MyBatis和Hibernate.他们都是对象关系映射ORM. 解决的主要问题就是对象-关系的映射.域模型和关系模型都分别建立在概念模 ...

  7. hibernate.cfg.xml hibernate 配置文件模板

    <?xml version='1.0' encoding='UTF-8'?> <!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition ...

  8. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  9. Hibernate 系列 02 - Hibernate介绍及其环境搭建

    引导目录: Hibernate 系列教程 目录 昨晚喝多了,下午刚清醒,继续搞Hibernate.走起. 觉得还行的话,记得点赞哈,给我这个渣渣点学习的动力.有错误的话也请指出,省的我在错误上走了不归 ...

  10. 【hibernate进阶】hibernate基本映射

            对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本 ...

最新文章

  1. 为什么 sin(x²)+sin(y²)=1 的图像这么复杂?
  2. linux c 错误 'for' loop initial declaration used outside C99 mode
  3. java 服务端客户端数据传输出现乱码
  4. r语言和python的区别_机器学习怎样开始比较好?Python还是R语言?
  5. ICCV 2017《Unsupervised Laerning of Important Objects from First-Person Videos》论文笔记
  6. Understanding Clouds from Satellite Images比赛的discussion调研与colab数据集下载配置
  7. else 策略模式去掉if_业务复杂=if else?刚来的大神竟然用策略+工厂彻底干掉了他们!...
  8. .net core orm框架_轻量级高性能PHP框架ycroute
  9. python名人名言代码打印_php随机输出名人名言的代码
  10. 2场直播丨MySQL 数据库最常见的 6 类故障的排除方法、2020数据技术嘉年华·金融峰会暨数据库大咖讲坛(第4期)...
  11. 04 循环结构概述和for语句的格式及其使用
  12. 【美团分享】美团大脑及其在推荐系统中的应用.pdf(附下载链接)
  13. 一些基本的数学概念,LDA的表述
  14. PHP的消息队列详解
  15. python for ArcGIS 绘制重庆市板块地图
  16. 8.HPE服务器添加物理磁盘做RAID以及关闭超线程
  17. JavaScript 实现抢购倒计时,记录恋爱1314纪念日倒计时,输出对应的天数小时分钟秒数
  18. 【转载】2005中文博客排名报告
  19. 三方支付四方支付聚合支付系统 集成 支付宝分账 代付 多商户 短信邮件 谷歌令牌验证
  20. Dev-cpp自定义主题:

热门文章

  1. 设计模式--外观模式
  2. [转]安卓开发startservice 和bindservice详解
  3. .NET业务实体类验证组件Fluent Validation
  4. Smark.Data 值转换器
  5. [原]为虚拟机添加新的磁盘分区
  6. JS+CSS打造一款漂亮绿色相册代码
  7. .Net Web项目安装包制作(三)补充说明
  8. java版b2b2c社交电商spring cloud分布式微服务(五)springboot整合 beatlsql
  9. .NET Core 2.0 Preview 2为开发人员带来改进
  10. 《Apache Common CLI官方文档