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

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

猜你喜欢

转载自www.cnblogs.com/DawnCHENXI/p/9092424.html
今日推荐