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 学习总结.doc
以下是我和我朋友在公司里用Hibernate开发各类项目后得出来的技术总结,我用Hibernate1年半了,在开发项目中遇到的问题很多,和各位交流下,希望会对各位有所帮助!!!
hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结
Hibernate学习笔记Hibernate学习笔记Hibernate学习笔记Hibernate学习笔记
Struts2+Spring3.0+Hibernate开发问题总结+知识讲解
对象持久化理论: 什么是对象持久化:把对象里面的数据转存到外部的持久存储设备中(如数据库、磁盘等) 为什么要对象持久化: 1、内存断电后,数据就会消失 2、需要共享数据 3、内存空间有限 ...
Hibernate_二级缓存总结 开发技术 - Java.zip
SSH_Struts1_Spring_Hibernate_配置开发总结。里面有实例的,大家可以参考下
SSH(Struts1+Spring+Hibernate)配置开发总结,非常的详细,如果大家配置上有什么问题可以留言问我。
我自己总结的超详细hibernate项目环境搭建文档
关于hibernate的总结。非常全面,独特的视角去理解hibernate在web开发中的地位。
本课程的讲解者李勇老师的技术功底非常深厚,课程内容组织得非常合理和巧妙,知识点的讲解也很细腻和透彻,总结了许多独有的经验,许多有经验的开发人员听完李勇老师的Hibernate课程后,都有一种恍然大悟的感慨。
hibernate中,对其中的查询方式进行总结,包括hql查询,条件查询,sql查询等
本课程的讲解者李勇老师的技术功底非常深厚,课程内容组织得非常合理和巧妙,知识点的讲解也很细腻和透彻,总结了许多独有的经验,许多有经验的开发人员听完李勇老师的Hibernate课程后,都有一种恍然大悟的感慨。
MyEclipse开发,Spring-Struts-Hibernate框架,MySql数据库 特别声明:文档是项目总结和我个人的原创总结,个人总结,个人总结,个人总结哦~并不含团队其他成员的总结哦~ 目录是模板里的请忽略,大家取用关键内容就...
它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用...
解析:来源:Hibernate提供了Hibernate Annotations扩展包,它可以替换复杂的hbm...作用:使得Hibernate程序的开发大大的简化。利用注解后,可不用定义持久化类对应的*.hbm.xml,而直接以注解方式写入持久化类的实现中。
javaweb开发经验总结,hibernate,spring,mysql方面的
本书所介绍的内容是作者多年J2EE 开发经验的总结,内容涉及 Struts 、 Hibernate 和 Spring 三个 开源框架,还介绍了 Tomcat 和 Jetty 两个开源 Web 服务器的详细用法,以及 J2EE 应用的几种常用 架构。 详尽而...
Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf