Hibernate性能优化要点
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存
对于上面这些,Robbin进行了详细的讲解。
one-to-many:
使用inverse=false(default),对象的关联关系是由parent对象来维护的
而inverse=true的情况下,一般用户双向多对多关联,由子对象维护关联关系,增加子对象的时候需要显示:child.setParent(child)
为了提高性能,应该尽量使用双向one-to-many inverse=true,在MVC结构中的DAO接口中应该直接用Session持久化对象,避免通过关联关系(这句话有点不理解),而在单项关系中正确使用二级缓存,则可以大幅提高以查询为主的应用。
多对一性能问题比较少,但是要避免经典N+1问题。
通过主键进行关联,相当于大表拆分小表。(这个是区分面向对象设计和面向过程设计的一个关键点)
list、bag、set的正确运用
one-to-many:
A、使用list 需要维护Index Column字段,不能被用于双向关联,而且必须使用inverse=false,需要谨慎使用在某些稀有场合(基本上是不予考虑使用)
B、bag/set在one-to-many中语义基本相同,推荐使用bag
many-to-one:
A、bag和set不同,bag允许重复插入,建议使用set
在庞大的集合分页中应该使用session.createFilter
session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))
避免N+1 参考(http://www.iteye.com/post/266972)
在多对一的情况下,查询child对象,当在页面上显示每个子类的父类对象的时候会导致N+1次查询,需要采用下面的方法避免:many-to-one fetch="join|select"(该方法可能有问题)
inverse=true 无法维护集合缓存(还不是很理解集合缓存和对象缓存)
OLTP类型的web应用,可以群集水平扩展,不可避免的出现数据库瓶颈
框架能降低访问数据库的压力,采用缓存是衡量一个框架是否优秀的重要标准,从缓存方面看Hibernate
A、对象缓存,细颗粒度,是针对表的级别,透明化访问,因为有不改变代码的好处,所以是ORM提高性能的法宝
B、Hibernate是目前ORM框架中缓存性能最好的框架
C、查询缓存
最后Robbin还针对大家经常出现的Hibernate vs iBatis的讨论进行了一个总结:
主要是基本的、日常的事务处理,例如银行交易 对于OLTP应用,使用ORM框架 而
OLEB应用(不确定是什么应用)最好采用JDBC或者其他方法处理
Hibernate倾向于细颗粒度设计,面向对象,将大表拆分为多个小表,消除冗余字段,通过二级缓存提升性能。
iBatis倾向于粗颗粒度设计,面向关系,尽量把表合并,通过Column冗余,消除关联关系,但是iBatis没有有效的缓存手段。
分享到:
相关推荐
### Hibernate程序性能优化的考虑要点 在开发基于Hibernate框架的应用时,性能优化是至关重要的环节。Hibernate作为一款优秀的对象关系映射(ORM)工具,它能够简化Java应用程序与数据库之间的交互,但不当的配置和...
以上是对Hibernate优化的一些核心要点,实践中还需要结合具体项目进行细致调整。理解Hibernate的工作机制,结合源码分析,可以更有效地找到性能瓶颈并进行优化。同时,利用工具如Profiler进行性能检测,可以帮助我们...
### Hibernate配置要点详谈 #### 一、配置文件与配置方式 在Hibernate中,有两种主要的配置文件形式:`hibernate.cfg.xml` 和 `hibernate.properties`。 1. **`hibernate.cfg.xml`**: - 这种配置文件通常包含...
1. **性能优化**:如缓存管理、批处理、懒加载和集合初始化的控制。 2. **级联操作**:理解如何正确配置和使用对象间的关联级联操作。 3. **延迟加载**:理解何时启用和避免“懒加载”引发的N+1查询问题。 综上所述...
### DB2性能优化详解 #### 一、引言 在数据库管理系统(DBMS)领域,IBM的DB2作为一款成熟且...希望本文的内容能够帮助读者更好地理解DB2性能优化的核心要点,并在实际工作中灵活运用这些知识来提升系统的整体表现。
### Java之Hibernate和Spring技术难点及其要点总结 #### Hibernate与Spring技术概述 在Java开发领域,Hibernate和Spring作为两个非常重要的框架,对于提高应用程序的开发效率、降低维护成本具有不可替代的作用。...
在性能优化方面,5.0.12版本引入了更高效的缓存策略。第二级缓存(Second-Level Cache)和查询缓存(Query Cache)得到了改善,可以减少数据库的访问次数,提高系统响应速度。此外,这个版本还优化了事务处理和并发...
### 性能优化 Hibernate提供了多种机制来优化数据库操作性能,例如二级缓存、懒加载和批量插入等。合理利用这些机制,可以显著减少数据库交互次数,提高应用的响应速度和整体性能。 ### 社区与文档 Hibernate拥有...
### 性能优化 为了提高Hibernate应用的性能,可以通过以下几种方式进行优化: - 使用二级缓存来减少对数据库的访问次数。 - 合理设置fetch模式,减少不必要的关联查询。 - 使用batch处理和延迟加载等技术减少网络...
3. **查询与检索**:涵盖各种查询方式(如HQL、Criteria API等),以及如何优化查询性能。 4. **高级特性**:探讨Hibernate的一些高级特性,比如缓存机制、事务处理等。 5. **错误处理与调试**:提供常见的错误处理...
3. **缓存机制**: Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),优化了数据库访问性能。 4. **事件监听器**: Hibernate允许通过实现特定接口注册事件监听器,对对象的生命...
- 第五天可能涉及了高级主题,如性能优化、缓存机制、Cascading和Lazy Loading等。 通过这五天的复习,读者将能够全面了解Hibernate的工作原理,熟练掌握其配置、对象映射和查询操作,为实际项目开发中的数据持久...
以上知识点只是Hibernate框架的一部分,实际的讲义和笔记可能会涵盖更多细节,如性能优化、复杂查询、CGLIB和JPA集成等内容。源代码示例则会进一步帮助学习者将理论知识转化为实践技能。在学习这些资料时,应结合...
通过分析hibernate-3.2.4-src中的源代码,我们可以了解到Hibernate的架构设计、内部工作流程,以及如何优化性能。这将对提升Java开发者在ORM领域的专业技能有很大帮助,同时也为调试和解决实际项目中的问题提供参考...
6. **完整**:"完整"一词可能意味着这个教程不仅涵盖了基本的集成步骤,还可能涉及了实际应用场景,如错误处理、性能优化、安全设置等方面,旨在提供一个可运行的、完整的示例项目。 以上是关于Struts、Spring和...
- 实现性能优化机制,如缓存和延迟加载。 4. **Hibernate的角色** - Hibernate是一个中间件,位于应用程序和数据库之间,简化了数据库访问。 - 它是一个持久化工具,隐藏了与数据库交互的复杂性,让开发者更专注...
#### 六、性能优化 - **缓存策略**:合理设置缓存级别和策略,可以显著提升应用性能。 - **批处理**:使用批量处理减少数据库交互次数,提高整体效率。 - **SQL 优化**:根据实际场景调整 SQL 查询语句,避免不必要...
8. **性能调优**:提供了关于如何优化Hibernate应用性能的一系列建议,包括查询优化、连接池配置等。 9. **集成测试**:介绍了如何将Hibernate与JUnit等测试框架结合使用,确保代码质量。 10. **扩展与定制**:探索...
8. **性能优化**:掌握查询优化技巧,如避免N+1查询问题,使用批处理等。 **实践应用**: 1. 创建一个简单的JPA_Hibernate项目,从零开始设置配置,创建实体,编写DAO层操作。 2. 实现用户注册和登录功能,涉及数据...
- **性能优化:** 通过对查询执行方式的选择、缓存策略的应用以及事务管理的调整等手段,可以有效提升Hibernate应用程序的运行效率。 ##### 5. 查询语言与检索 - **HQL与Criteria API:** Hibernate提供了两种主要...