`
lijiejava
  • 浏览: 259136 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

Hibernate数据批量查询

阅读更多
Hibernate中提供了两种批量查询的方法:list与iterate。 Hibernate查询接口Query,Criteria的查询功能,其内部也是基于这两个方法实现。

概述:list方法通过一条sql语句实现查询操作,而iterate方法第一次发出的sql语句获得所以符合条件的记录的id,之后,再根据各个id从库表中读取对应的记录,这是一个典型的N+1问题。

Hibernate同时提供这两种方法的原因:
(1) 在于Hibernate的缓存机制

list方法执行sql语句,从数据库中获得所有符合条件的记录并构造相应的实体对象,实体对象构建完毕之后,将其纳入缓存。这样,如果之后再执行iterate方法,它首先执行一条sql语句获得所有符合查询条件的数据id,随即,iterate方法首先在本地缓存中根据id查找对应的实体对象是否存在(类似session.load方法),如果缓存中已经存在对应的数据,则直接以此数据对象作为查询结果。如果没能找到,再执行相应的sql语句(iterate方法如果执行sql语句,获得对象后也会将其纳入缓存)。如果目标数据只读或者读取相对较为频繁,两者结合使用可大大提高性能。

(2)除此之外,还有内存使用上的考虑

假设需要对海量数据进行操作,那么list方法将一次获取所有的记录并将其读入内存。假设有10万条,可能会出现内存溢出。解决方法就是结合iterate和evict方法逐条对记录进行处理,将内存消耗保持在可接收的范围内。(iterate方法返回Iterator类型,只有调用next方法时才发出sql语句)

分享到:
评论

相关推荐

    Hibernate下数据批量处理解决方案

    很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据

    Hibernate中大量数据的更新

    使用Hibernate将大量记录插入到数据库

    Hibernate实现批量添加数据的方法

    主要介绍了Hibernate实现批量添加数据的方法,详细分析了基于Hibernate执行批量添加操作的具体步骤与相关实现代码,需要的朋友可以参考下

    hibernate批量删除

    在我们的Java项目中,批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。批量删除虽然在Hibernate里也可以实现,但因Hibernate的实现机制是一个一个删除,在数量大的情况下很影响...

    2022年Hibernate下数据批量处理Java教程.docx

    2022年Hibernate下数据批量处理Java教程.docx

    Hibernate批量处理数据

    看完该文件你就可以最高效率的批量处理数据

    Hibernate配置各种数据源详解

    Hibernate配置各种数据源 <hibernate-configuration> <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ”show_sql”>true <!– SQL方言,这边设定的是MySQL –> ”dialect”>...

    浅析Hibernate下数据批量处理方法.doc

    不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过

    jsp Hibernate批量更新和批量删除处理代码

    批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。

    Hibernate批量处理海量数据的方法

    主要介绍了Hibernate批量处理海量数据的方法,较为详细的分析了Hibernate批量处理海量数据的原理与相关实现技巧,需要的朋友可以参考下

    Java中Hibernate的批量插入

    Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。...为了面对这种批量处理的场景,Hibernate提供了批量处理的解决方案。下面分别

    Hibernate批量处理

    高效的进行批量数据的处理方案,留作参考。

    Hibernate管理Session和批量操作分析

    主要介绍了Hibernate管理Session和批量操作的技巧,包括Hibernate管理Session、批量处理数据等的常用技巧及注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下

    Hibernate

    Hibernate下数据批量处理解决方案

    Hibernate+中文文档

    3.2. Hibernate数据源属性 3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) ...

    彻底解决hibernate常见难点.zip

    Hibernate处理1-N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在...

    Hibernate实战(第2版 中文高清版)

     13.2.1 批量预抓取数据   13.2.2 通过子查询预抓取集合   13.2.3 通过联结即时抓取   13.2.4 给二级表优化抓取   13.2.5 优化指导方针   13.3 高速缓存基本原理   13.3.1 高速缓存策略和范围   ...

    hibernate3.2中文文档(chm格式)

    3.2. Hibernate数据源属性 3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) ...

    hibernate基础教程

    当我们只对数据进行查询的时候,可以将并发策略设置为:read-only. 当我们要对数据进行修改的时候,可以将并发策略设置为:read-write. 第六步:设置EhCache的配置文件. ...

    HibernateAPI中文版.chm

    3.2. Hibernate数据源属性 3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) ...

Global site tag (gtag.js) - Google Analytics