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

相关文章

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析: