Hibernate之查询中get()和load()的区别,list()和iterate()的区别

2023-11-09





【Hibernate】之查询中get()和load()的区别,list()和iterate()的区别


list()查询

//一次性把数据对象取出来
    @Test
    public void findTestList(){
        Session s=sessionFactory.getCurrentSession();
        s.beginTransaction();
        List<Person> persons=s.createQuery("from Person").list();
        for(Person person:persons){
            System.out.println(person.getName()+"----"+person.getId());
        }
        s.getTransaction().commit();
    }
sql语句如下:

16:00:43,118 DEBUG SQL:111 - 
    select
        person0_.id as id1_,
        person0_.p_age as p2_1_,
        person0_.group_id as group4_1_,
        person0_.p_name as p3_1_ 
    from
        p_person person0_
张三0----1
张三1----2
张三2----3
张三3----4
张三4----5
张三5----6
张三6----7
张三7----8
张三8----9
张三9----10

iterate()查询

//一次性取出来的是所有对象的主键值,并且会把这些主键值放在Session缓冲中去
    //下次需要的话,直接在Session中获取,不需要再次访问数据库
    //缺点是将查询出来的主键值,分别再以主键进行取值对象,造成数据库压力巨大
    @Test
    public void findTestIterate(){
        Session s=sessionFactory.getCurrentSession();
        s.beginTransaction();
        Iterator<Person> persons=s.createQuery("from Person").iterate();
        while(persons.hasNext()){
            System.out.println(persons.next().getName());
        }
        s.getTransaction().commit();
    }
SQL语句

16:03:55,776 DEBUG SQL:111 - 
    select
        person0_.id as col_0_0_ 
    from
        p_person person0_
16:03:55,806 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三0
16:03:55,823 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三1
16:03:55,826 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三2
16:03:55,832 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三3
16:03:55,836 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三4
16:03:55,838 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三5
16:03:55,841 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三6
16:03:55,844 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三7
16:03:55,846 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三8
16:03:55,875 DEBUG SQL:111 - 
    select
        person0_.id as id1_0_,
        person0_.p_age as p2_1_0_,
        person0_.group_id as group4_1_0_,
        person0_.p_name as p3_1_0_ 
    from
        p_person person0_ 
    where
        person0_.id=?
张三9

get()查询

//立刻发送sql语句,不管我们是否需要,比如person.getName();
    @Test
    public void findTestget(){
        Session s=sessionFactory.getCurrentSession();
        s.beginTransaction();
        Person person=(Person)s.get(Person.class, 1);
//      System.out.println(person.getName());
        s.getTransaction().commit();
    }

load()查询

//不会立刻发送sql语句,只有当我们需要的时候才会发送sql语句,比如person.getName();
    @Test
    public void findTestload(){
        Session s=sessionFactory.getCurrentSession();
        s.beginTransaction();
        Person person=(Person)s.load(Person.class, 1);
//      System.out.println(person.getName());
        s.getTransaction().commit();
    }



list()和Iterator()不同之处:
1、list()查询所有
2、Iterator()查主键
3、list()每次查询都访问数据库
4、Iterator()每次查询先访问Session缓冲,存在就直接获取,不存在再查询数据库


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate之查询中get()和load()的区别,list()和iterate()的区别 的相关文章

  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • 使用 Hibernate 作为 ORM 机制的 Web 应用程序中的 L1 和 L2 缓存有什么区别?

    我只想要一些有关使用 L1 缓存和 L2 缓存的标准用途的一般信息 我很好奇 因为我正在研究使用赤土陶器作为二级缓存的系统 并且我发现它也有一级缓存 L1 缓存是每个 Hibernate 会话都存在的缓存 并且该缓存不在线程之间共享 该缓存
  • 只读模式下不允许写操作(FlushMode.MANUAL)

    我对Spring真的很陌生 我正在使用 JSF Hibernate Spring 开发一个简单的 JEE 应用程序 我在尝试更新 DAO 上的值时遇到一些问题 我确信问题与 Spring 配置 xml 文件有关 但我无法找出是什么 这是我的
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • Android 中的 Sugar ORM:更新 SQLite 中保存的对象

    我是在 Android 上使用 SQLite 和 Sugar ORM 进行应用程序开发的新手 并尝试阅读 Sugar ORM 文档 但没有找到有关如何更新 SQLite 中保存的对象的任何信息 更改对象属性后还可以保存对象吗 就像是 Cus
  • NHibernate HQL 相当于 T-SQL 的 TOP 关键字

    NHibernate HQL 相当于 T SQL 的 TOP 关键字是什么 另外 用非 HQL 方式说 给我一门课的前 15 个 是什么意思 在 HQL 中这实际上非常简单 var top15 session CreateQuery fro
  • 适用于真正复杂查询的 ORM 解决方案

    在这样复杂的情况下 人们可以 应该使用任何 ORM 解决方案吗 这可以用以下方法完成吗Propel or Doctrine 目前我正在使用 Propel 所以如果有 Propel 解决方案 我会很高兴 如果我使用 propel 进行直接查询
  • 通俗地说,Ruby on Rails ORM 是什么?请解释

    我无法理解 Ruby on Rails 中的 ORM 据我了解 表 列和对象 属性之间存在 1 1 的关系 所以每条记录都是一个对象 另外 模型到底是什么 我知道它映射到一张桌子 我真正追求的是对上述内容有更深入的理解 预先感谢您的帮助 我
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • 如何在Intershop7中注册ORMObjectListener

    我们在网上商店实现中实现了几个自定义 ORM 对象 这些对象引用 依赖 Intershop Product 系统对象 当用户尝试删除后台中的某个产品时 会导致问题 因为对该产品的引用可能仍然存在于我们的自定义对象中 当然 删除从我们的自定义
  • Hibernate 中的 UserType 加入

    在这种情况下 是否有可能让 hibernate 为某些 正确 值做 正确的事情 from ClassA a ClassB b where a prop b prop 问题是 prop 是一个 UserType 在连接表中具有不同的表示形式
  • ORM 之于 RDBMS 就像 xxx 之于 OLAP 多维数据集一样? xxx存在吗?

    是否有用于查询 OLAP 多维数据集 数据仓库的 ORM 类似物 我对 NET 世界特别感兴趣 但一般对任何事物都感兴趣 我启动了一个开源项目 Kona 来包装 ADOMD Net 库 并尝试将 ADOMD Net 引入 21 世纪 你可以
  • 为什么 SQLAlchemy 在删除对象后不更新关系?

    Problem 在同一会话内 删除某个对象后 会话中包含或指向该删除对象的其他对象的关系属性不会更新 简而言之 sesion add a b a parent b print a parent b session delete b prin
  • Sails 嵌套模型集合

    我有 3 个型号 用户模型 module exports schema true attributes login type string required true hosts collection host via owners acc
  • Laravel Eloquent with()-> 返回 null

    我正在尝试使用 Eloquent 来获取具有以下功能的特定产品 brand id映射到a的列brands表 该brand数组返回空 这里有什么明显需要改变的地方吗 product Product with images gt with br
  • 如何在 Hibernate 3.6 中正确级联保存主键上的一对一双向关系

    我与共享密钥有一对一的双向实体关系 当我尝试保存关联的所有者时 我收到针对关系拥有方的 生成 null id 异常 我正在利用 hibernate entitymanager 并使用 spring 进行事务管理 拥有实体 Entity Ta
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • spring+hibernate 没有 xml 的映射类

    在我的 applicationContext xml 中 这就是我将 xml 映射到 POJO 的方式 如何将目录映射到类文件而不需要创建 xml
  • 如何在 QueryDSL 中选择文字

    我目前正在开发一个使用 queryDSL 和 hibernate 的项目 其中它需要一个选择文字 按照发布的示例here https stackoverflow com questions 18691317 querydsl how to

随机推荐