- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate高级应用 Hibernate性能优化 1.DB设计 2.API的正确使用 3.主配置参数 4.映射文件优化 5.一级缓存的管理 6.二级缓存的管理 7.事务控制策略 Hibernate数据缓存 (1)数据缓存概述 在特定硬件基础上,缓存往往是提升系统性能的关键因素。 对于ORM而言,缓存更为重要。 良好的缓存管理机制以及合理的缓存应用模式往往是性能提升的关键。 (2)数据缓存策略 ORM的数据缓存包含如下层次: 事务级缓存:在当前事务范围内的数据缓存策略。 应用级缓存:在某个应用中,或者应用中某个独立数据访问子集中的共享缓存。 分布式缓存:在多个应用实例,多个JVM之间共享的缓存模式。 (3)Hibernate数据缓存 Hibernate的数据缓存分为两个层次: 内部缓存(也称为一级缓存) 二级缓存 Hibernate中缓存在以下情况中发挥作用: 通过id(主键)加载数据时 延迟加载 一级缓存 如果要同步很大数量的对象,就需要有效地管理Cache. 在保存50000个或更多对象时,程序可能抛出OutOfMemoryException异常,因为Hibernate在一级Cache缓存了新加入数据库的所有对象。要解决这个问题,首先把JDBC批处理数量设置为一个合理的数值(一般是10~20)。 在Hibernate.cfg.xml中设置如下: property name=“hibernate.jdbc.batch_size” 20/property 然后在一定时刻提交更改并清空Session的Cache: 二级缓存 二级Cache是SessionFactory范围内的缓存,所有的Session共享同一个二级Cache。 在引入二级缓存时必须考虑以下两个问题: DB是否与其他应用共享 应用是否需要部署在集群环境中 二级缓存 如果数据满足以下条件,则可以纳入缓存管理: 数据不会被第三方应用更改 数据大小在可接受的范围内 数据更新频率较低 同一数据可能会被系统频繁利用 非关键数据 二级缓存 不适合放入缓存的数据: 经常被修改的数据。 财务数据,绝对不允许出现并发。 与其他应用共享的数据 Hibernate中本身并未提供二级缓存的产品化实现,而是通过第三方缓存组件提供了接入接口。 Hibernate第三方缓存实现 Hibernat中提供的面向第三方缓存实现的接口: EhCache OpenSymphony OSCache SwarmCache JBossCache 在Hibernate中使用EhCache EhCache是一个纯Java程序,可以在Hibernate中作为一个插件引入。它具有运行快、结构简单、占用内存小、依赖性小、支持多CPU服务器和文档齐全的特点。 在Hibernate中使用EhCache,需要在hibernate.cfg.xml中设置如下: 在Hibernate中使用EhCache EhCachcProvider类位于Hibernate3.jar包中,而不是位于ehcache-1.1.jar包中。EhCache有自己的配置文档,名为ehcache.xml。 在Hibernate中使用EhCache 此外,还需要在持久化类的映射文件中进行配置。 在Hibernate中使用EhCache 如果希望把整个Student的散装属性都加入到二级缓存中还需要在Student.hbm.xml文件的class标记中加入cache子标记,如下面代码所示: 缓存同步策略 缓存同步策略决定了数据对象在缓存中的存取规则。Hibernate提供4种内置的缓存同步策略: 事务(transactional) 读写(read-write) 非严格读写(nonstrict-read-write) 只读(read-only) Hibernate事务 1、事务控制 (1)事务的特性 事务是一步或几步操作组成的逻辑执行单元。 事务具备4个特性: 原子性 一致性 隔离性 持续性 (2)Hibernate的事务 Hibernate直接使用JDBC连接和JTA资源,不添加任何附加锁定行为 。 数据库操作的不确定情况: 脏数据 不可重复读取 虚读 在Hibernate配置文件中设置隔离级别 JDBC连接数据库使用的是默认隔离级别,即可重读Repeatable Read)。在Hibernate的配置文件中,可以修改隔离级别: 1:读操作未提交(Read UncOmm
文档评论(0)