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

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. 多重影分身——C#中多线程的使用一(基础)

    首先明确几个概念: 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 一个程序通常只有一个进程(不包括exe ...

  2. InnoDB的4个特性

    innodb 的四个特性 insert buffer innodb使用insert buffer"欺骗"数据库:对于为非唯一索引,辅助索引的修改操作并非实时更新索引的叶子页,而是把 ...

  3. python单线程,多线程和协程速度对比

    在某些应用场景下,想要提高python的并发能力,可以使用多线程,或者协程.比如网络爬虫,数据库操作等一些IO密集型的操作.下面对比python单线程,多线程和协程在网络爬虫场景下的速度. 一,单线程 ...

  4. Java 8 基础教程 - Predicate

    在Java 8中,Predicate是一个函数式接口,可以被应用于lambda表达式和方法引用.其抽象方法非常简单: /** * Evaluates this predicate on the giv ...

  5. Triangle (第8届山东省赛的某题)

    triangle(第8届山东省赛的某题) 传送门 题意:喵了个呜,这题意真是峰回路转啊.懒死了,不想描述. 做法:我们拿set或线段树维护exp的最小值,每次取出exp值最小的边,删除之.并更新这条边 ...

  6. 代码生成平台Xxl-Code-Generator

    <代码生成平台Xxl-Code-Generator> 一.简介 1.1 概述 Xxl-Code-Generator 是一个 "controller/service/dao/myb ...

  7. Storm之路-WordCount-实例

    初学storm,有不足的地方还请纠正. 网上看了很多wordcount实例,发现都不是我想要的. 实现场景:统计shengjing.txt词频到集合,一次打印结果. ● 消息源Spout 继承Base ...

  8. Java 核心卷学习笔记(一)

    Java基程序设计结构 1.注释 三种注释方式: // 注释单行 /* 内容 */ 注释单行 /** * 内容 */

  9. (function($){...})(jQuery) 含义 【转】

    经常用,今天总结一下,下文摘自某网友的总结: (function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看. 这里实际上是匿名函数 function(arg){... ...

  10. CDH简易离线部署文档

        CDH 离线简易部署文档       文档说明 本文为开发部署文档,生产环境需做相应调整. 以下操作尽量在root用户下操作,避免权限问题. 目录 文档说明 2 文档修改历史记录 2 目录 3 ...