1、OpenSessionInView对系统的影响有多大没测试过,不过大家都说使用的时候一定要慎重。个人使用也比较少
2、既然用了hibernate, lazyload毫无疑问是一个很好的东西,否则是自找麻烦。但是lazy对性能的影响有大多不得而知。
3、hibernate默认会把所有字段都update一次,这个对效率当然是有影响的。
你可以试着写hql去update或者设置动态sql: 在update 的时候又选择的去save,但是动态sql对效率的提升有多大我也不太清楚。
4、个人觉得N+1不是问题,在有缓存的情况下效率和性能应该是很高的。
反而过多的关联查询性能不一定高/低多少,这样N+1不是什么坏事,何况在缓存的情况下根本就不会去查数据库。
5、要搞清楚为什么要用lazy和什么情况下用lazy,用和不用的区别、影响又在哪。不要一出问题就说什么把lazyload设置成EAGER之类的就当成是解决了问题了事。这类人完全没明白自己在干什么。
7、如果是openAmf这类遇到需要序列化的项目(lazyload不起作用),这个时候就别想着用什么lazy、EAGER和OpenSessionInView了 实体全部拆散,需要的时候自己再封装成一个对象里面去。回归原始。
8、既然没有lazyload就应该明白过多的对象关联是很恐怖的。
例如:User 里面有几个UserPorperty对象用来存储User的道具状态之类的。现在你只希望update status这一个字段在User user=get(User);的时候会把这些无用属性都查出来,因为:EAGER。
当然 你可以用几个办法解决:1、”update User set status = 1“。2、lazy 3、把User里面的UserProperty对象改为Integer :ID在需要的时候再去查询
9、开发效率和性能无法兼得。
最典型的例子就是hibernate会加载你“不需要”的东西出来。
例如:你想找出User 的status、age属性,在查询的时候会把整个User都加载出来。代码上是方便了许多,以后如果扩展也很方便,因为这里User的东西都有了随便你之后修改其他属性。
但是在这里千万别说Hibernate效率低,因为这是你选择的结果:如果你希望效率更高,整个系统的东西都应该是你定制的。
例如:你这里只想修改status =1
那么你就应该用hql:"update User set status = 1" 而不是User user=get(User); user.setStatus(1); save(user);
10、关于批量saveOrUpdate,这里我只用过隔20/30次save操作flush一次这种方式,还有拼接sql字符串的方式的效率会更高一些。
不要直接用hibernateTemplter提供的saveOrUpdateAll方法,对于大的数组会内存溢出,因为hibernate都是把session存在内存中
11、用HQL的语法大部分只用到了封装对象模式(我自己这样描述) 就像:"from User" 而是不 "select * from t_user"。如果需求是很复杂的场景hibernate还是提供了sql方式解决:createSQLQuery()
12、使用hibernate最理想的情况就是系统是用的时候就设计好了的,而且你应该明白设计之后的系统的利弊。
其中影响最大的就是实体之间的关系如何设定,lazyload openSessioninView是否能够派上用处。
一旦用不上思维就要变换了,最显著的地方就是不要把fetch 模式改为EAGER就了事,这样只会让你跑来发帖说hibernate效率如何之差
13、缓存那是一定要用的,使用简单效果明显。ehcache很好很强大。
14、 lazy+缓存 < 一个好的设计
个人在开发过程中遇到的最多问题大概就这些了,效率问题无非是体现在封装和load整个实体这2个方面。总要的是如果你想优化,空间还是有很多的。实在不行我们还有大绝招:createSQLQuery() !
欢迎大家来补充。提供更多的优化和解决办法。
分享到:
相关推荐
**总结:**Hibernate开发jar包是Java开发人员进行数据库操作的强大工具,它包含了一系列的jar文件,覆盖了ORM框架的核心功能。通过理解和熟练使用这些jar包,开发者可以更加高效地进行数据库驱动的应用程序开发,...
《Hibernate开发指南》由夏昕老师撰写,是一本详尽且深入浅出的教程,旨在为初学者提供全面的Hibernate框架学习资源。本书不仅涵盖了Hibernate的基础知识,还深入探讨了其高级特性,使读者能够从理论到实践全方位...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
**Hibernate 框架概述** ...理解并熟练掌握 Hibernate,能够提升开发效率,减少出错的可能性,是 Java 开发者的必备技能之一。通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。
《Hibernate 开发文档详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层数据存储。本篇文章将深入探讨Hibernate 3.1.1和...
### Hibernate开发指南知识点详解 #### 一、简介与概述 - **书名**: Hibernate开发指南 - **描述**: 本书是一本简洁明了地介绍Hibernate框架的书籍,涵盖了Hibernate的主要内容及其具体应用方法。 #### 二、...
总结来说,Hibernate是一个强大的ORM框架,它极大地简化了Java应用的数据库操作,提高了开发效率,并提供了高级特性如缓存、事务管理等。通过深入理解和熟练使用Hibernate,开发者可以构建更高效、更易于维护的...
### 使用Eclipse进行Hibernate开发详解 #### 一、前言 Hibernate是一个强大的对象关系映射(ORM)框架,它能够简化Java应用与数据库之间的交互过程。通过Hibernate,开发者可以使用面向对象的方式处理数据库操作,...
总结,这个压缩包包含了Hibernate开发所需的全部jar包,包括Hibernate核心库、JTA事务管理、JPA规范实现等,使用这些jar包,开发者可以轻松实现Java项目中的ORM功能,利用Hibernate的强大功能进行数据库操作,同时...
**Hibernate 开发包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个“Hibernate 开发包”包含了用于开发基于Hibernate的应用程序所需的全部组件,包括核心...
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...
### 夏昕《Hibernate开发指南》V3.0.4 关键知识点解析 #### 一、Hibernate概述 Hibernate 是一款非常流行的 Java 持久层框架,它为开发者提供了对象关系映射(Object Relational Mapping,简称 ORM)的功能,使得 ...
总结来说,这个“Ajax+Spring+Hibernate开发的个性化定制系统”展示了现代Web开发中的最佳实践,将强大的异步客户端技术、灵活的服务器端管理和高效的数据库操作相结合,构建了一个高效、用户友好的定制平台。...
**Hibernate开发各类项目的技术总结** Hibernate,作为Java领域的一个强大对象关系映射(ORM)框架,极大地简化了数据库操作,让开发者可以专注于业务逻辑而非繁琐的SQL语句。在我一年半的开发经验中,我逐渐积累了...
### Hibernate开发指南知识点详解 #### 一、简介与背景 - **标题与描述**: “Hibernate开发指南”旨在为Java开发者提供一份全面的指南,帮助他们理解并熟练掌握Hibernate框架的使用方法。作为一款流行的Java持久层...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
以上是Hibernate的核心知识点,通过理解和掌握这些内容,开发者能够高效地使用Hibernate进行数据库操作,提升开发效率,同时降低维护成本。阅读提供的"Hibernate.pdf"文档将进一步深入理解这些概念,并提供实际示例...