------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
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
如果博客文章有错误,请指出,感激不尽!!!!!!!!!!!!!!!!!!