Query的list()和iterate()方法的区别

揭秘CAS:深入理解与应用解析 在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。 阅读详情

1.Query接口的list与iterate方法:

iterate()方法:

Return the query results as an Iterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].
Entities returned as results are initialized ondemand. The first SQL query returns identifiers only.

(返回的实体只有在使用时才会被初始化,执行该方法查询时只会返回实体的标识符(即id))

list()方法:

Return the query results as a List. If thequery contains multiple results pre row, the results are returned in aninstance ofObject[].

2.两者区别:

对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。

3. 例:

 Session session =sessionFactory.openSession();
    
    Transaction tx =null;
    
    //List<People> list = null;
    
    Iterator<People> iter = null;
    
    try
    
    {
    
        tx= session.beginTransaction();
    
       Query query = session.createQuery("from People");

 

    /*使用iterate方法

    Iterator<People> iter = (Iterator<People>)query.iterate();

   

    while(iter.hasNext())

    {

        session.delete(iter.next());

    }

    */

//关于这两种删除数据库中的记录的方式的效率的对比(假如共查到5条记录):

// iterate()方法:执行6条select语句和5条delete语句

//list()方法:执行1条select语句和5条delete语句

// 此时list的效率比较高

//使用list方法

    //list = (List<People>)query.list();

   

//  for(Iterator<People> iter = list.iterator(); iter.hasNext();)

//  {

//      session.delete(iter.next());

//  }

 

//在session关闭之前调用iterate方法在session关闭后再用iter访问people对象以证明iterate方法没有返回完整的对象

iter = (Iterator<People>)query.iterate();

tx.commit();

}catch(Exception ex)

{

    if(null != tx)

    { tx.rollback();}

}finally

{session.close();}

//在session关闭之后就不可能再向数据库发送SQl语句来获取对象的属性(即填充完整对象),则会抛出SessionException异常提示"Session is closed!"

while(iter.hasNext())

{

    System.out.println(iter.next().getId());

}

关于Query接口的其它方法,详见API帮助文档

list()方法无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存;iterate()方法可以充分利用缓存,如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。
② list()方法不会引起N+1查询问题,而iterate()方法可能引起N+1查询问题。

原文地址:http://blog.youkuaiyun.com/jialinqiang/article/details/8718437

STM32 HAL PWM (占空比) -电机软启动不到位解决 为了避免电机启动电压大造成设备损坏,或者供电不足导致重启,通常在对启动都需要一个PWM进行软启动,下面对PWM电机软启动详细介绍。 阅读详情

相关推荐

阿里云大模型ACP认证模拟考试(一)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 4742

java list query,java - 将Hibernate Query.list()强制转换为List <Type>的“正确”方法是什么?...

java - 将Hibernate Query.list()强制转换为List 的“正确”方法是什么?我是Hibernate的新手,我正在写一个简单的方法来返回一个对象列表匹配特定的过滤器。 List似乎是一种自然的回归类型。无论我做什么,我似乎都无法让编译器高兴,除非我使用了一个丑陋的Exception。import java.util.List;import org.hibernate.Qu...

weixin_28717411的博客 554

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3288

hibernate_query.list()返回的数据类型

query.list()方法的使用解析。

pseudonym_的博客 5986

手把手用瑞萨E1仿真器调试RH850 CAN通信:从报文收发到底层寄存器监控

本文详细介绍了使用瑞萨E1仿真器调试RH850 CAN通信的全过程,包括硬件连接、CS+开发环境配置、CAN控制器寄存器解析以及双通道网关实战开发。通过实战案例和错误诊断技巧,帮助开发者快速掌握RH850F1L的RS-CAN控制器应用,提升车载网络开发效率。

weixin_30919429的博客 163

西电计科数据库系统期末复习笔记

本人西电19计科,数据库系统98,这是复习期间整理的笔记,基本涵盖了课程全部重点,有需要的学弟学妹可以在复习的时候参考一下。

Polaris的博客 8596

query.list()

List list = query.list(); String yeear = list[0].get(2).toString(); (√)很怪异 List list = query.list(); String yeear = list.get(2).toString(); (×)

iteye_15903的博客 507

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

hibernate query.list() 返回的数据类型

转至:http://blog.csdn.net/lychaox/article/details/6825078     在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:   1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充。   2.只查询一个字段,...

青春有块盒子的地 360

反应动力学仿真软件:CHEMKIN_(12).CHEMKIN与其他软件的接口

通过上述介绍,我们详细探讨了如何将 CHEMKIN 与 MATLAB、Python、COMSOL、Aspen Plus 和 Ansys Fluent 等软件工具进行接口配置和数据交互。这些接口不仅能够显著提升 CHEMKIN 在反应动力学仿真中的应用效果,还能充分利用其他软件工具的强大功能,实现更复杂的数据处理和分析。希望这些内容对您在化学反应动力学仿真中的工作有所帮助。

kkchenjj的博客 1138

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 765

hibernate 中 query.list()的优化

2018年3月15日 今天做项目遇到一个需求,问题是在调用query.list()的时候,因为数据也多大概700条左右,查询一次需要30s+,这简直是不能忍,于是开始考虑怎么优化。 1.因为是单表查询,不涉及表间的复杂关联,所以想到的是可能是没加索引吧,那我就加上索引,重新启动项目查询,没有改变。 2.有人说是session连接没有释放,也就是session.colse(),对我这不适用。也...

weixin_30809333的博客 1026

励磁电感 Lm 选对了,LLC 才真“高效”:半桥 LLC 效率优化

你有没有遇到过这种 LLC:参数一套下来,ZVS 也有了,波形看着也“挺谐振”,但一上功率——,效率就是死活上不去。我说句直白的:LLC 的“高效”,很大一部分其实是在背后控场。Lm 选小了,励磁电流蹭蹭涨,谐振电流 RMS 变大,导通损耗、开关损耗、整流损耗一起上天;Lm 选太大,又可能把 ZVS 的门槛抬高,轻载掉 ZVS,EMI 也开始作妖。

weixin_43199439的博客 434

Hibernate Query接口 iterate()和list()方法的区别

list()方法 无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存 Hibernate是通过一条Select SQL获取所有的记录。并将其读出,填入到POJO中返回.所以list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了)。所以返回的每个对象都是原本的对象。 iterate()方法 iterator()方法所返回的对象...

wt_shi 1772

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hibernate里Query的list()和iterate()方法的区别

1.Query接口的list与iterate方法: iterate()方法: Return the query results as anIterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].Entities returned as ...

weixin_30413739的博客 191

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

query.list()和query.iterate()区别

list方法返回的是结果集的list集合,iterate返回的是iterator迭代器。      list方法查询所有记录只发送一条sql语句,select * from 表名      iterate方法查询所有记录的话,先查询到满足条件的所有记录id,并不立即查询所有结果,当我们有用到某个记录的话,他才查询。如果显示所有记录的话需要n+1条sql语句。第一条查id,接下去根据id,一条一

Kei's Blog 1296

Query.list() 和 Query.Iterate() 的区别

iterate()方法Return the query results as an Iterator. If the query contains multiple results pre row, the results are returned in aninstance of Object[]. Entities returned as results are initialized on...

lstoryc的专栏 151

Hibernate中get()与load(),query.list()与query.iterate()区别

Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于:  1.如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception.  2.[color=red]load()方法可以返回...

water_mys的专栏 205

hibernate-Query.list()与Query.iterate()比较

hibernate-Query.list()与Query.iterate()比较  (2010-11-10 16:29:29) 转载▼ 标签:  杂谈 对于list方法而言,实际上Hibernate是通过一条Select SQL获取所有的记录。并将其读出,填入到POJO中返回。 而iterate 方法,则是首先通过一条

@过客@的专栏 1293

Hibernate Query的list()和iterate()的区别

Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,1:返回的类型不一样,list()返回List, iterate()返回Iterator,2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库...

moonights的专栏 141

hibernate中Query的list()和interate()方法比较和用法

Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有几点不一样, 1:返回的类型不一样,list()返回List, iterate()返回Iterator, 2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数

shmilybinyu的感悟 1482

Hibernate中的Query接口

一.Hibernate框架的API 学习每一个知识点,都要知道这个知识点的源头是在哪里,只有看最原始的内容,才能让我们理解的更深.对于java来说最原始的就是他的api. 1.框架的API在哪里看? 首先在官网下载这个压缩包,在里面找到 hibernate-release5.0.7.Final\documentation\javadocs\index.html https://source

5456

Hibernate学习笔记:list和iterate

Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,1:返回的类型不一样,list()返回List, iterate()返回Iterator,2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这

sunxing007的专栏 1494

Hibernate使用Query接口的list()与iterate()进行查询区别

使用Query接口的list()与iterate()进行查询区别: 1、使用list(),会一次性将所有符合条件的记录查询出来;而使用iterate(),则首先会查询出所有符合条件的记录的 id,然后再根据这些 id 逐个查询出记录的具体内容. 2、使用 list(),不会使用缓存机制,即每执行一次查询代码,控制台均会执行一次 SQL查询语句;而使用 iterate(),则会使用缓存机制,只有...

qq_42499188的博客 697

Hibernate学习笔记:list和iterater

<br /> <br />Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,<br />1:返回的类型不一样,list()返回List, iterate()返回Iterator,<br />2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。<br />

天行健,君子以自强不息!~ 832
上一篇: java反射机制
下一篇: Java中“==”、equals()、hashcode()的区别与联系
DanLongChen
博客等级 码龄9年 13粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值