网站大量收购闲置独家精品文档,联系QQ:2885784924

基于J2EE技术Hibernate架构优化策略探讨.docVIP

基于J2EE技术Hibernate架构优化策略探讨.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于J2EE技术Hibernate架构优化策略探讨

基于J2EE技术Hibernate架构优化策略探讨   [摘 要]Hibernate是最流行的对象关系映射(ORM)引擎之一,它提供了数据持久层的查询服务。在一般情况下,Hibernate需要转换为SQL语句来执行JDBC存取。但是在经过比较好的性能优化之后,其性能还是让人相当满意的,特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能。   [关键词]Hibernate、;HQL;缓存;JDBC   中图分类号:TP301.6,024 文献标识码:A 文章编号:1009-914X(2015)05-0238-01   1 引言   Hibernate是一个面向Java环境的O/R映射数据库映射工具。Hibernate不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate本质还是包装了JDBC来进行数据库操作的,是对JDBC最高效的调用。Hibernate是轻量级的封装,避免过多复杂的功能,减轻程序员的负担。同时,它也是一个开源的中间件,提供开放的API,用户可以自行扩充其功能。Hibernate在大多数主流的J2EE应用服务器的受管理环境中都可以良好运作,也可以作为独立应用程序运行。   2 数据库设计   数据库是整个系统的核心,它的设计直接关系系统执行的效率和系统的稳定性。因此在软件系统开发中,数据库设计应遵循必要的数据库范式理论,以减少冗余、保 证数据的完整性与正确性。只有在合适的数据库产品上设计出合理的数据库模型,才能降低整个系统的编程和维护难度,提高系统的实际运行效率。   2.1 建索引   在结果正确的前提下,用可以识别的SQL语句,充份利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。   2.2 减少表之间的关联   设计人员往往会设计过多的表间关联,以尽可能地降低数据冗余。但在实际应用中这种做法有时不利于系统运行性能的优化:如过程从多表获取数据时引发大量的连接操作,在需要部分数据时要扫描整个表等,这都消耗了磁盘的I/O和CPU时间。   2.3 简化查询字段   字段类型尽可能反映真实的数据含义,满足功能外字段应该尽可能的短。 比如能用int字段的就不要用bigint,如果在某一个关系表里只有两个id字段,那么bigint类型显然比int类型的大了一倍。   2.4 适当的冗余数据,不过分最求高范式   我们在利用范式设计表的时候,要根据具体的需求再去权衡是否使用更高范式去设计表。在一般的项目中,我们用的最多也就是第三范式,第三范式也就可以满足我们的项目需求,性能好而且方便管理数据。   3 HQL优化   Criteria1查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。   现在有两条HQL查询语句,分别如下:   from Customer c inner join c.orders o group by c.age;(1)   select c.ID,c.name,c.age,o.ID,o.order_number,o.customer_ID   from Customer c inner join c.orders c group by c.age;(2)   这两条语句使用了HQL语句的内连接查询,现在我们可以看出这两条查询语句最后所返回的结果是一样的,但是它们其实是有明显区别的,语句(1)检索的结果会返回Customer与Order持久化对象,而且它们会被置于Hibernate的Session缓存之中,并且Session会负责它们在缓存中的唯一性以及与后台数据库数据的同步,只有事务提交后它们才会从缓存中被清除;而语句(2)返回的是关系数据而并非是持久化对象,因此它们不会占用Hibernate的Session缓存,只要在检索之后应用程序不再访问它们,它们所占用的内存就有可能被JVM的垃圾回收器回收,而且Hibernate不会同步对它们的修改。   4 缓存优化   很多Hibernate的使用者在调用其相应方法时都相信“Hibernate会自行为我们处理性能的问题”,或者“Hibernate会自动为我们的所有操作调用缓存”,实际的情况是Hibernate虽然为我们提供了很好的缓存机制和扩展缓存框架的支持,但是必须经过正确的调用其才有可能发

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档