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

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

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

Hibernate-ORM:05.Hibernate中的list()和iterator()的更多相关文章

  1. ORM和Hibernate的配置方式

    分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...

  2. 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化

    准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...

  3. hibernate学习(三) hibernate中的对象状态

    hibernate对象的状态分为三种:  游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration   cfg=new Configuration().configure(); ...

  4. Hibernate之ORM与Hibernate

    ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如O ...

  5. Hibernate (ORM)

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  6. Hibernate 系列 05 - Session 类

    引导目录: Hibernate 系列教程 目录 前言: Session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关. 就如同在编写JDBC时需要关 ...

  7. hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别

    hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别 转自http://www.blogjava.net/bnlovebn/archi ...

  8. ORM框架Hibernate (一) 对DAO封装和抽象

    说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...

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

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

  10. wildfly 10上使用最新的 Hibernate ORM OGM

    ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...

随机推荐

  1. sublime使用package control安装插件

    sublime本身可以集成Package Control来进行插件安装,非常方便. 1. 安装package control(插件包管理) 1.1 进入https://packagecontrol.i ...

  2. 【转】H.264中的NAL技术

    NAL技术 1.NAL概述 NAL全称Network Abstract Layer,即网络抽象层.在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面 ...

  3. eclipse更新time out的问题

    因为网络等诸方面的原因,中国国内访问download.eclipse.org非常慢,更新往往都会失败,简单解决的是从eclipse官网下载镜像列表中选一个中国镜像设为更新站点,当然这个镜像的选择,需要 ...

  4. ImageMagick

    http://blog.csdn.net/lan861698789/article/details/7738383 1.官网 http://www.imagemagick.org/script/ind ...

  5. redis资源未释放引发的问题

    一.redis资源未释放的起因: N年前,在修改一个古老程序时,不小心把redis释放的这块给干掉了, if (jedis != null) { if (!isInProcess) { jedis.d ...

  6. Java自学开发编程路线图(文中有资源福利)

    Java 语言入门 免费视频资源<毕向东Java基础教程>:http://yun.itheima.com/course/7.html JavaEE 学习大纲 所处阶段 主讲内容 技术要点 ...

  7. C语言编对双精度数保留一位小数

    /*第一题*/ #include<stdio.h> //输入1.2345 输出1.2000 //输入1.2547 输出1.3000 main(){ ; printf("请输入:\ ...

  8. 微信小程序入门三实战

    微信小应用借鉴了很多web的理念,但是其与传统的webApp.微信公共号这些BS架构不同,他是CS架构,是客户端的程序 小程序开发实战--豆瓣电影 项目配置 -在app.jsop中进行简单配置 --n ...

  9. 让 Homebrew 走代理更新 + brew 管理 node 版本

    0.前言 环境:MacOS 背景:整理下今天所做的配置. 1. 让 Homebrew 走代理更新 brew update 就卡住了,即使开了 shadowsocks 也不行.因为 shadowsock ...

  10. python都能做什么

    一.python: Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起.常见的一种应用情形是,使用Python快速生成程序的原型 ...