Hibernate-ORM:05.Hibernate中的list()和iterator()

简介:   ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       Hibernate中查多条(全部)使用list()或iterator() 本篇介绍:   1.

 

 

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

 

 

 

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

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

目录
相关文章
|
XML SQL Java
Hibernate-ORM:14.Hibernate中的命名查询
      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编写查询语句,本篇博客将讲述xml中的方式 一,准备好准备工作,我由于上篇博客把大量的准备都做好,所以,本篇从简 二,预览hbm.
1029 0
|
SQL Java 数据库连接
Hibernate-ORM:15.Hibernate中的Criteria查询
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介:   刚接触Hibernate的时候,就有一个概念,全自动的ORM框架,不用写...
980 0
|
SQL 缓存 Java
Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录   1.
1221 0
|
Java 关系型数据库 程序员
Hibernate-ORM:13.Hibernate中的连接查询
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     本篇博客将会解释Hibernate中的连接查询(各种join) 一,目录   1.
903 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:12.Hibernate中的多对多关联关系
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵   一,讲述多对多   多对多的关联关系,比如学生和教师来说,一个学生由多个教师授课...
1244 0
|
安全
Hibernate-ORM:09.Hibernate中的getCurrentSession()
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类   优点:   1.
1256 0
|
Java 关系型数据库 MySQL
Hibernate-ORM:10.Hibernate中的分页
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客讲述Hibernate中的分页 hibernate中的分页其实很好写,它通过操作对象的方式,来进行分页查询操作 分页无非就是查俩个:1.
937 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:11.Hibernate中的关联查询
      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客将讲述Hibernate中的关联查询,及其级联(cascade)操作,以及指定哪一方维护关联关系的(inverse)   一,讲述目录如下:   1.
1196 0
|
缓存 Java 数据库连接
Hibernate-ORM:06.Hibernate中三种状态
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flush三种状态间的使用,commit和flush的区别: save...
1096 0
|
SQL Java 数据库连接
Hibernate-ORM:07.Hibernate中的参数绑定
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     本篇博客会讲解Hibernate中的参数绑定,就是相当于sql语句中的where后面的条件   一,讲解概述:   1.
1037 0