Hibernate Query的list()和iterate()的区别
Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,
1:返回的类型不一样,list()返回List,iterate()返回Iterator,
2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。3:iterate会查询2级缓存, list只会查询一级缓存。
4:list()中返回的List中每个对象都是原本的对象,iterate()中返回的对象是代理对象.(debug可以发现)
改写BookDao以及实现类来测试一下list()和iterate();在BookDao中添加一个方法:public void iterate(){ Iterator itr = getSession().createQuery("from Book").setMaxResults(5).iterate(); while(itr.hasNext()){ //在这里debug一下会发现b为代理对象 Book b = (Book)itr.next(); System.out.println(b); } }
BookDao dao = new BookHibernateDao(); dao.iterate(); System.out.println("**************************"); dao.iterate(); List<Book> list = dao.pagedList(6, 5); list = dao.pagedList(6, 5);
相关推荐
xiaoseyihe 2020-11-16
xiaoseyihe 2020-11-16
世事一场大梦 2020-10-18
jling 2020-10-14
chenyuping 2020-10-06
kyelu 2020-08-03
KAIrving 2020-08-02
xiesheng 2020-08-02
liushall 2020-07-18
shenwenjie 2020-07-07
yunfenglee 2020-07-08
83520298 2020-07-06
Jonderwu 2020-07-05
xiaobater 2020-07-04
范范 2020-06-28
newusb 2020-06-28