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

相关文章

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java