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

2024-05-16 10:08

本文主要是介绍Hibernate之查询中get()和load()的区别,list()和iterate()的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!





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


list()查询

//一次性把数据对象取出来@Testpublic 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 - selectperson0_.id as id1_,person0_.p_age as p2_1_,person0_.group_id as group4_1_,person0_.p_name as p3_1_ fromp_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中获取,不需要再次访问数据库//缺点是将查询出来的主键值,分别再以主键进行取值对象,造成数据库压力巨大@Testpublic 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 - selectperson0_.id as col_0_0_ fromp_person person0_
16:03:55,806 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三0
16:03:55,823 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三1
16:03:55,826 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三2
16:03:55,832 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三3
16:03:55,836 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三4
16:03:55,838 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三5
16:03:55,841 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三6
16:03:55,844 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三7
16:03:55,846 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三8
16:03:55,875 DEBUG SQL:111 - selectperson0_.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_ fromp_person person0_ whereperson0_.id=?
张三9

get()查询

//立刻发送sql语句,不管我们是否需要,比如person.getName();@Testpublic 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();@Testpublic 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缓冲,存在就直接获取,不存在再查询数据库


这篇关于Hibernate之查询中get()和load()的区别,list()和iterate()的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994600

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor