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, ...
随机推荐
- java并发包分析之———AQS框架
一.什么是同步器 多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx . 这个共同的语义可以称之为同步器.可以认为以上所有的锁机制都可以基 ...
- Webapck项目开发基本构建及配置
1.创建项目文件夹 myapp 手动创建myapp,或mkdir myapp 2.cd myapp 3.npm init (初始化项目) 4.一路回车(关于项目信息的填写,可以不写,一路回车即可) 可 ...
- Java反射之调用内部类
1. 反射调用默认访问权限的内部类 package com.blueStarWei.invoke; import java.lang.reflect.Method; import com.blueSt ...
- 自动生成MyEclipse 安装破解码
新建一个class 文件,Debug 模式运行一个,输入任意值 ,回车得到破解安装码 代码文件如下: import java.io.*; public class MyEclipseGen { pri ...
- pydev 下Django 1.7 undefined variables from import问题的解决
参考:http://stackoverflow.com/questions/24951029/pydev-django-undefined-variables-from-import 参考上面的帖子认 ...
- svn Server sent unexpected return value (403 Forbidden) in response to CHECKOUT
今天,提交資料到公司svn服務器,但是一直提示 Server sent unexpected return value (403 Forbidden) in response to CHECKOUT ...
- VueJs(12)---vue-router(导航守卫,路由元信息)
vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...
- CDN及CDN加速原理
本想自己写这个主题的文章,但网上已经有人写了一篇非常好的文章,觉得难以望其项背.就没有必要再写,直接转载如下: 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度.优化现有Inte ...
- Jms的MessageListener中的Jms事务
摘要 一般来说,如果为JmsTemplate做了事务配置,那么它将会与当前线程的数据库事务挂钩,并且仅在数据库事务的afterCommit动作中提交. 但是,如果一个MessageListener在接 ...
- 区分命令行模式和Python交互模式
命令行模式 在Windows开始菜单选择"命令提示符",就进入到命令行模式,它的提示符类似C:\> Python交互模式 在命令行模式下敲命令python,就看到类似如下的一 ...