- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hibernate优化.
1.抓取优化抓取是指Hibernate如何在关联关系之间进行导航的时候,Hibernate如何获取关联对象的策略,其主要定义了两个方面:如何抓取和何时抓取如何抓取。Hibernate3主要有两种抓取方式,分应用于对象关联实例(many-to-one、one-to-one)和对象关联集合(set、map等),总共是四种变种 JOIN抓取: 通过在SELECT语句中使用OUTER JOIN来获得对象的关联实例或者关联集合)SELECT抓取: 另外发送一条SELECT语句来抓取当前对象的关联实体和集合在我的开发经历中,此处对性能的优化是比较有限的,并不值得过多关注例: 应用于对象关联实例(默认是false)many-to-one name=.. outer-join=true/false/auto? .../
应用于对象关联集合(默认是auto) set name=.. fetch=join/select ...
/set
何时抓取 主要分为延迟加载和立即抓取,默认的情况下Hibernate3对对象关联实采用延迟加载,普通属性采用立即抓取,通过延迟加载和采用适当的抓取粒度,与不采用优化相比往往可以将性能提升数倍立即抓取:当抓取宿主对象时,同时抓取其关联对象和关联集以及属性延迟加载:当抓取宿主对象时,并不抓取其关联对象,而是当对其对象进行调用时才加载例: 应用于对象关联实例(默认是延迟加载) many-to-one name=..? lazy=true/false .../
应用于对象关联集合(默认是延迟加载) set name=.. lazy=true/false ... /set 对于延迟加载,需要注意的时,对延迟对象的使用必须在Session关闭之前进行,Hibernate的 LazyInitalizationException往往就是由于在Session的生命期外使用了延迟加载的对象。当我们进行Web开发时,可以使用 OpenSessionInView模式,当请求开始时打开session,当请求响应结束时才关闭session,不过,在使用 OpenSessionInView模式时,需要注意如果响应时间比较长(业务比较复杂或者客户端是低速网络),将Session资源(也就是数据库的连接)占用太久的话可以会导致资源耗尽抓取粒度 抓取粒度指的是对象在关联关系之间被导航时一次预先加载的数量,Hibernate程序的性能比较差往往就在于没有对抓取粒度仔细考虑,当加载一个列表并在列表中的每个对象中对其关联进行导航时,往往导致N+1条SQL语句查询。例:应用于对象关联实例(默认为1),注意,对对象关联实例的设置是在被关联的对象之上的,譬如class User { Group g; } 那么抓取粒度应该在Group的配置文件之上,见下 class name=Group table=group batch-size=.. ... /class 对该值并没有一个约定俗成的值,根据情况而定,如果被关联表数据比较少,则可以设置地小一些,3-20,如果比较大则可以设到30-50,注意的时候,并不是越多越好,当其值超过50之后,对性能并没有多大改善但却无谓地消耗内存假设有如下例子: ListUser users = query.list(); 如果有20个User,并对这20个User及其Group进行遍历,如果不设置batch-size(即batch-size=1),则在最糟糕的情况下,需要1 + 20条SQL语句,如果设置batch-size=10,则最好的情况下只需要1 + 2条SQL语句 应用于对象关联集合(默认为1) set name=.. batch-size= ... /set2.二级缓存 Hibernate对数据的缓存包括两个级:一级缓存,在Session的级别上进行,主要是对象缓存,以其id为键保存对象,在Session 的生命期间存在;二级缓存,在SessionFactory的级别上进行,有对象缓存和查询缓存,查询缓存以查询条件为键保存查询结果,在 SessionFactory的生命期间存在。默认地,Hibernate只启用一级缓存,通过正确地使用二级缓存,往往可以获得意想不到的性能。对象缓存: 当抓取一个对象之后,Hiberate将其以id为键缓存起来,当下次碰到抓取id相同的对象时,可以使用如下配置方法1:在缓存对象上配置 class ... cache useage=read-only/write/ regions=group / /class useage表示使用什么类型的缓存,譬如只读缓存、读写缓存等等(具体参见Hibernate参考指南),值得注意的时,有部分缓
您可能关注的文档
最近下载
- 1 《中国人民站起来了》课件(共61张PPT)统编版高中语文选择性必修上册.pptx VIP
- AI赋能的软件测试效能跃迁的四大应用场景-2025研发效能最佳实践.pdf VIP
- 电力电子技术 浣喜明 第七章 软开关技术.ppt VIP
- 水冷壁管更换施工工艺.docx VIP
- 卫生院优质服务基层行3.3.4患者安全风险管理.docx VIP
- (高清版)DB4403∕T 306-2022 《智慧停车停车库(场)信息化建设规范》.pdf VIP
- 电力电子技术 浣喜明 第六章 交流变换电路.ppt VIP
- 高中联赛难度几何100题(新版).pdf VIP
- 福建省地方课程《海西家园》.ppt VIP
- 2025年秋新北师大版数学2年级上册全册同步教学设计.pdf
文档评论(0)