




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate高级特性本章目标了解Hibernate检索策略掌握Hibernate延迟加载了解Hibernate缓存机制掌握Hibernate缓存配置方式本章简介在前面的内容中,我们探讨了Hibernate的基础使用技术。通过对这些基础技术的把握,我们即可开始进行基于Hibernate的持久层开发。然而,在这些应用技术之后,存在着怎样的运行机制以及其内部实现方式对应用层可能产生怎样的影响,则是我们下面需要关注的问题。类级别检索策略和关联级别检索策略类级别检索策略又分为立即检索和延迟检索两类,默认的检索策略是立即检索。在Hibernate映射文件中,通过在<class>上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load()方法,也就说,对于get检索和query检索,持久化对象都会被立即加载而不管lazy的值是false还是true。一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load()方法在检索不到对象时会抛出异常(立即检索的情况下),因此编者不建议使用load检索。而且,由于<class>中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。一对多和多对多关联关系一般使用<set>节点配置。<set>节点中有lazy和outer-join属性,它们的不同取值绝定了不同的检索策略。立即检索:这是一对多默认的检索策略,此时<set>节点的“lazy=false”,“outer-join=false”。尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。延迟检索:此时“lazy=true”,“outer-join=false”(outer-join=true是无意义的),这是优先考虑的检索方式。迫切左外连接检索:此时“lazy=false”,“outer-join=true”,这种检索策略只适用于依靠id检索方式(例如load、get),而不适用于query的集合检索(query检索会采用立即检索策略)。相比于立即检索,这种检索策略减少了一条sql语句,但在Hibernate中,只能有一个<set>节点配置成“outer-join=true”。多对一和一对一检索策略一般使用<many-to-one>、<one-to-one>节点配置。<many-to-one>中需要配置的属性是outer-join,同时还需要配置one端关联的<class>节点的lazy属性(注意:配置的不是<many-to-one>中的lazy哦),它们的组合后的检索策略如下:<many-to-one>中的“outer-join=auto”:这是默认值,如果one端关联的<class>的“lazy=true”则为延迟检索,如果one端关联的<class>的“lazy=false”则为迫切左外连接检索。<many-to-one>中的“outer-join=true”:无关于one端关联的<class>的lazy属性,都为迫切左外连接检索。<many-to-one>中的“outer-join=false”:如果one端关联的<class>的“lazy=true”则为延迟检索,否则即为立即检索。Hibernate延迟加载机制
实体对象的延迟加载集合类型的延迟加载什么是Hibernate缓存缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,其目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能。Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,Hibernate缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据,从而提高应用程序的运行性能。Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升。Hibernate缓存的分类
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。Hibernate一级缓存又称为“session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)。Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。Hibernate的缓存管理一级缓存的管理Session中提供了如下几个方法对一级缓存进行管理:evit(Objectobj):将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象。Clear():将一级缓存中的所有持久化对象清除,释放其占用的内存资源。Contains(Objectobj):判断指定的对象是否存在于一级缓存中。flush():刷新一级缓存区的内容,使之与数据库数据保持同步。二级缓存的管理SessionFactory中提供了如下方法对二级缓存进行管理:Evict(Classarg0,Serializablearg1):将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源。Hibernate的二级缓存的配置Hibernate的二级缓存功能是靠配置二级缓存插件来实现的,为了集成这些插件,Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。EHCacheorg.hibernate.cache.EhCacheProviderOSCacheorg.hibernate.cache.OSCacheProviderSwarmCaheorg.hibernate.cache.SwarmCacheProviderJBossCacheorg.hibernate.cache.TreeCacheProviderHibernate的二级缓存策略的一般过程如下:条件查询的时候,总是发出一条类似“select*fromtable_namewhere……”(选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。把获得的所有数据对象根据ID放入到第二级缓存中。当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。删除、更新、增加数据的时候,同时更新缓存。Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。使用Hibernate实现数据的删改与修改类似,删除时也需要先加载数据。在使用Hibernate编写持久化代码时,不需要再有数据库表、字段等概念。根据面向对象的语义,删除操作方法的参数理所当然是将要删除的对象,而不是主键。以面向对象的思维编写代码是Hibernate持久化操作接口设计的一个理念。Hibernate的Query缓存策略的过程如下Hibernate首先根据这些信息组成一个QueryKey,QueryKey包括条件查询的请求一般信息:SQL,SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。Hibernate根据这个QueryKey到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据QueryKey放入到Query缓存中。QueryKey中的SQL涉及一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的QueryKey都要从缓存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内务管理年终总结
- 日常生活小妙招培训学习
- 教育机构邀约话术
- Unit 3《Lesson 9 It's a Cute Duck》(教学设计)-2024-2025学年北京版(2024)英语三年级上册
- 海水养殖废水循环利用技术考核试卷
- 术后疼痛病人的中医护理
- 幼儿园厨师岗前培训内容
- 视觉传播设计效果评估试题及答案
- 液压油泄漏处理考核试卷
- 海上风电场的能量输出预测模型考核试卷
- 陕西省西安市高新一中2024-2025学年九年级3月份学业水平考试模拟历史试题(含答案)
- GB/T 44115.3-2025信息技术虚拟现实内容表达第3部分:音频
- 《商务沟通与谈判》全套教学课件
- 校长在清明祭扫活动上讲话缅怀先烈不是一种简单的仪式而是一种深刻的情感表达和精神传承
- 储能行业项目风险评估报告
- 广东省2025年普通高等学校招生全国统一考试模拟测试(一)地理及答案
- 土方平衡方案
- 上海市农村房地一体宅基地确权登记工作实施方案
- 全国第三届职业技能大赛(无人机驾驶(植保)项目)选拔赛理论考试题库(含答案)
- 危险化学品目录(2024版)
- 幼儿园国防教育课件动态PPT模板红色水墨渐变简约卡通
评论
0/150
提交评论