第7章 Hibernate的二级缓存和查询缓存.ppt

第7章 Hibernate的二级缓存和查询缓存.ppt

ID:48770775

大小:901.50 KB

页数:28页

时间:2020-01-23

第7章  Hibernate的二级缓存和查询缓存.ppt_第1页
第7章  Hibernate的二级缓存和查询缓存.ppt_第2页
第7章  Hibernate的二级缓存和查询缓存.ppt_第3页
第7章  Hibernate的二级缓存和查询缓存.ppt_第4页
第7章  Hibernate的二级缓存和查询缓存.ppt_第5页
资源描述:

《第7章 Hibernate的二级缓存和查询缓存.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、HibernateORM最佳实践第7章Hibernate的二级缓存和 查询缓存回顾QBC(querybycriteria)面向对象查询方式利用HQL和criteria连接查询Hibernate的数据检索策略2目标学会使用和管理Hibernate的二级缓存学会使用和管理Hibernate的查询缓存使用Hibernate的统计机制监视二级缓存的使用情况3Hibernate缓存使用流程在一级缓存中查找命中?Y查询结果结束N启用二级缓存在二级缓存中查找命中?保存结果到一级缓存Y数据库查询NYN保存结果至二级缓存避免频繁从数据库读取大量重复数据提供很好的性能4二级缓存第一级缓存(与

2、session绑定)session缓存并发策略查询缓存CacheProviderOSCacheEHCacheJBossTreeCache第二级缓存(与SessionFactory绑定)查询缓存依赖于二级缓存二级缓存默认是关闭的,需要在配置文件中设置hibernate.cache.provider_class将不同对象放在指定缓存区域二级缓存由第三方组件提供实现二级缓存策略设置隔离级别在映射文件中:queryid5缓存并发策略为了使用二级缓存,在POJO的映射文件中增加一个配置项来说明该POJO的存取策略.

3、ead-only

4、read-write

5、nonstrict-read-write

6、transactional”/>只允许对该对象在二级缓存中读取操作在二级缓存中对该对象可以读写操作(利用时间戳并发控制)非严格读写策略,要求并发更新同一数据的几率很低事务策略,提供可重复读事务隔离级别,用于分布式环境中6缓存提供者-第三方组件分三步来配置启用Hibernate的二级缓存①在Hibernate配置文件hibernate.cfg.xml中设置缓存提供者实现类②设置缓

7、存的配置文件,用以增强缓存功能③在POJO映射文件中设置缓存并发策略注意:启用二级缓存后,当调用save()、update()、saveOrUpdate()写入一个对象时,或使用load()、get()、list()、iterator()获得一个对象时,这个对象都将被放在session缓存和二级缓存中。7示例①类对象进行缓存(以EhCache举例)用第三方组件EhCacheProvider启动二级缓存;设置Hibernate的统计为true8代码对类对象设置二级缓存策略9运行当我们关闭二级缓存,结果会怎样?将Student.hbm.xml中

8、d-write”/>去掉。10当第二次读取对象前,清除二级缓存中的Student对象11运行?问题默认缓存区域指定与类名相同的缓存区域12示例②对集合进行缓存(以OsCache举例)Teacher.hbm.xml对集合进行缓存注意:对集合进行缓存其目的提高性能,所以除了在集合元素下启用缓存,对于集合元素对应的类文件也应该使用缓存。如果集合元素对应的类文件没使用缓存,发现对象不存在,Hibernate会从数据库中读取,失去意义。13代码Student.hbm.xml将hibernate.cfg.xml增加二级缓存第三方组件提供者:增加oscache.properties缓存

9、配置14运行从二级缓存取出15问题:①将上述程序中,修改检索对象id=605,出现什么情况?由于在上一次运行的结果保留在二级缓存中,没有触发select操作;对象id=605不在缓存中,所以到数据库中查询。查询的结果保留在一级和二级缓存中。②将上述缓存文件清除,修改学生映射表,不使用二级缓存,查询学生对象601,情况怎样?为什么还要触发select操作,二级缓存中已经有teacherID=101?16学生对象不保存在二级缓存中立即加载失去意义;缓存提高性能失去意义17查询缓存在前面的例子中可以发现:⑴如果我们使用list()函数载入对象时,它不会使用二级缓存,也就是说不会

10、先尝试从二级缓存中查找对象,而是直接从数据库中使用select语句读取对象。⑵如果使用iterate()函数时,Hibernate会先使用一条selectid的语句从数据库中把符合条件的id都取出来,然后再根据id一个一个载入对象,如果缓存有,从缓存取,没有从数据库载入。怎么办?希望先到二级缓存中查找,启用查询缓存①查询缓存是Map结构,以查询的HQL和查询参数作为缓存中的key,其value存放的是这个查询条件所返回所有对象id。②根据所获得id再到类对象的二级缓存中去载入对象。③使用查询缓存,必须先启动二级缓存,同时在类的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。