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
如果博客文章有错误,请指出,感激不尽!!!!!!!!!!!!!!!!!!
Hibernate-ORM:05.Hibernate中的list()和iterator()的更多相关文章
- ORM和Hibernate的配置方式
分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
- hibernate学习(三) hibernate中的对象状态
hibernate对象的状态分为三种: 游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration cfg=new Configuration().configure(); ...
- Hibernate之ORM与Hibernate
ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如O ...
- Hibernate (ORM)
1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...
- Hibernate 系列 05 - Session 类
引导目录: Hibernate 系列教程 目录 前言: Session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关. 就如同在编写JDBC时需要关 ...
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别 转自http://www.blogjava.net/bnlovebn/archi ...
- ORM框架Hibernate (一) 对DAO封装和抽象
说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...
- hibernate里的generator中class =value介绍
在*.hbm.xml必须声明的<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识.<generator class="sequence ...
- wildfly 10上使用最新的 Hibernate ORM OGM
ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...
随机推荐
- 自动红眼移除算法 附c++完整代码
说起红眼算法,这个话题非常古老了. 百度百科上的描述: "红眼"一般是指在人物摄影时,当闪光灯照射到人眼的时候,瞳孔放大而产生的视网膜泛红现象. 由于红眼现象的程度是根据拍摄对象色 ...
- quicksort(java版)
相信大家都知道几种排序算法,比如说冒泡排序,选择排序,插入排序等等,这些个算法都不是很难,自己多多理解理解就能掌握了,而今天我们要谈的就是重头戏就是快速排序. 引用大牛的思想来对排序算法解释一下.(文 ...
- Docker快速入门(二)
上篇文章<Docker快速入门(一)>介绍了docker的基本概念和image的相关操作,本篇将进一步介绍image,容器和Dockerfile. 1 image文件 (1)Docker ...
- Niop2017初赛滚粗记
初赛踢蹬滚粗 TOT (╯°Д°)╯︵┻━┻ ヽ(`Д´)ノ︵ ┻━┻ ┻━┻ 排序啊排序,净是排序,自打我学了C++就再没学过排序!!wtf! (╯°Д°)╯︵ /(.□ . )我tm怎么知道建国那 ...
- Pascal Triangle
Description: Given numRows, generate the first numRows of Pascal's triangle. For example, given numR ...
- linux基础命令用法
目录管理 ls.cd.pwd.mkdir.rmdir.tree ls(list) 列出,列表 用法: ls -l:长格式 文件类型: -:普通文件 (f) d: 目录文件 b: 块设备文件 (bloc ...
- 杨老师课堂_VBA学习教程之根据部门列创建工作表
课件下载 : 方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1rf5pRmZ95fjVbz70KYi6Aw 密码: q9yk 方式2:或点击此处下载 效果预览图: ...
- Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...
- nginx常用配置系列-反向代理
接上篇,反向代理的原理与用途很多地方有讲,用文字说再多可能也表达不清楚,下面贴一张拓扑图,介绍下什么叫反向代理 以上图有两种情景 1. 访问者的客户端是 local ,要访问baidu的服务器,bai ...
- Netty中如何写大型数据
因为网络饱和的可能性,如何在异步框架中高效地写大块的数据是一个特殊的问题.由于写操作是非阻塞的,所以即使没有写出所有的数据,写操作也会在完成时返回并通知ChannelFuture.当这种情况发生时,如 ...