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

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. Tornado、Bottle以及Flask

    最近接手一个Tornado项目代码,项目要在原有基础上做很大扩展,为了更好地吃透并扩展好这个项目,就对Tornado以及比较轻型的Bottle.Flask这些框架一一作了调研.其实若干年前做第一个Py ...

  2. postgresql 异步流复制hot standby搭建

    先说说环境,主从库版本都是9.5,主库在CentOS物理机上,从库在Ubuntu虚拟机上 一.主库上的操作: 1.添加同步访问规则: host   replication     dbuser     ...

  3. SQL转化为MapReduce的过程

    转载:http://www.cnblogs.com/yaojingang/p/5446310.html 在了解了MapReduce实现SQL基本操作之后,我们来看看Hive是如何将SQL转化为MapR ...

  4. 洛谷 P2764 解题报告

    P2764 最小路径覆盖问题 问题描述: 给定有向图\(G=(V,E)\).设\(P\) 是\(G\) 的一个简单路(顶点不相交)的集合.如果\(V\) 中每个顶点恰好在\(P\) 的一条路上,则称\ ...

  5. 基于elk 实现nginx日志收集与数据分析。

    一.背景 前端web服务器为nginx,采用filebeat + logstash + elasticsearch + granfa 进行数据采集与展示,对客户端ip进行地域统计,监控服务器响应时间等 ...

  6. eclipse maven 构建简单springmvc项目

    环境:eclipse Version: Oxygen.3a Release (4.7.3a) 创建maven Project项目,目录结构 修改工程的相关编译属性 修改pop.xml,引入spring ...

  7. git merge 撤销与git 回滚

    git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...

  8. Javassist字节码增强示例

    概述 Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果.熟练使用这套工具,可以让Java编程更接近与动态语言编程. 下面一个方 ...

  9. CentOS7 安装 MySQL

    一.首先检查 MySQL 是否已安装 yum list installed | grep mysql 如果有的话 就全部卸载 yum -y remove +数据库名称 二.MySQL 依赖 libai ...

  10. Go 自带的 http/server.go 的连接解析 与 如何结合 master-worker 并发模式,提高单机并发能力

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...