zoukankan      html  css  js  c++  java
  • Hibernate : Query.list()、Query.iterator()的区别

    Query上有list()与iterator()方法,两者的差别在于list()方法在读取数据时,并不会利用到快取,而是直接再向数据库查询,而iterator()则将读取到的数据写到快取,并于读取时再次利用。

    来看看下面的程序:

    Session session = sessionFactory.openSession();
            
    Query query = session.createQuery("from User");
    List users = query.list();
    users = query.list();

    session.close();


    这个程序片段会使用两次SQL来查询数据库:

    hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_
    Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_


    如果在Session关闭之前,要再将所有数据在取出,可以使用iterator()方法,例如:

    Session session = sessionFactory.openSession();

    Query query = session.createQuery("from User");
    Iterator users = query.iterate();
    users = query.iterate();

    session.close();


    这个程序片段会使用一次SQL向数据库查询,第二次则直接从快取中取得数据:

    Hibernate: select user0_.id as col_0_0_ from user user0_


    由于使用iterator()方法时会使用到Session level快取,所以在查询大量数据时,会耗用大量的内存,必要时可以使用Session的evict()或clear()方法来清除快取。

  • 相关阅读:
    c#中==和equals的比较
    原型指向改变如何添加方法和访问
    把随机数对象暴露给window成为全局变量
    内置对象Array的原型对象中添加方法
    构造函数可以实例化对象
    原型
    无刷新评论
    大量字符串拼接案例
    元素隐藏占位与不占位
    导航栏切换效果案例
  • 原文地址:https://www.cnblogs.com/Syria/p/6363871.html
Copyright © 2011-2022 走看看