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

相关文章

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE