




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate缓存 对象状态 教学内容 理解Hibrnate的缓存机制理解对象的状态 Hibernate的缓存 Hibernate的缓存分为 一级缓存 单个会话的对象缓存 二级缓存 可插拔的缓存插件 理解Session缓存 当Session加载或保存一个对象时 如果Session的缓存中不存在相应的对象 hibernate就会把该对象加入到一级缓存中 当再次通过Session加载相同OID的对象时 Hibernate将直接从Session的缓存中获取 当Session关闭时 缓存将被清空 第一次加载时将产生SQL访问数据库Customercusa Customer session get Customer class 1l 第二次加载同样的Customer时Hibernate将从Session中获取Customercusb Customer session get Customer class 1l cusa和cusb应当是同一对象If cusa cusb System out println 同一个对象 缓存被清空session close Session缓存的作用 减少访问数据库的频率 应用程序从内存中获取对象明显快于从数据库中查找 保证缓存中的对象与数据库相关的记录同步 当处于缓存中的对象的属性发生改变时 Session不会立即更新数据库 它可以将多次更新合并处理后产生一条更新语句 Customercustomer Customer session get Customer class 1 customer setName jack customer setName mike session update customer 以上只会产生一条sql语句 updateCustomersetname mike 同步Session缓存 Hibernate会在特定的时间自动同步缓存与数据库当人为提交事务时 commit 方法先清理缓存 然后再向数据库提交事务 当执行session的查询方法时 如果缓存中持久化对象的属性发生了变化 就会先清理缓存 以保证查询结果能反映持久化对象的最新状态 当执行session flush时 注意 关闭Session时 Hibernate不会执行缓存同步 evict Objecto 从缓存中清除指定的对象clear 清空缓存中的所有对象 管理一级缓存 Hibernate二级缓存 二级缓存是一个可以插拔的缓存插件 它由SessionFactory负责管理 由于SessionFactory对象的生命周期和应用程序的生命周期对应 因此二级缓存是进程范围或群集范围的缓存 缓存中存放的是对象的散装数据而不是对对象的引用 可以被一个SessionFactory的所有sesison共享二级缓存是可选的 可以在每个类或每个集合的粒度上配置二级缓存 Hibernate二级缓存的执行机制 应用程序 一级缓存 事务范围内的Session缓存 二级缓存 进程范围或群集范围的缓存 数据库 写 读 写 读 如果在事务范围的缓存 第1级缓存 中没有查询到相应的数据 还可以到进程范围或群集范围的缓存 第2级缓存 内查询 如果在进程范围或群集范围的缓存内也没有找到该数据 那么就只好查询数据库 二级缓存是可配置的插件 Hibernate允许选用以下类型的缓存插件EHCacheOSCacheSwarmCacheJBossCache这些插件都是由第三方提供的 Hibernate2以前提倡用EHCacheHibernate3后提倡用OSCache Hibernate二级缓存的第三方实现 使用OSCache配置二级缓存 把oscache 2 1 jar加入到当前应用的classpath中 修改hibernate cfg xml文件开启二级缓存 trueorg hibernate cache OSCacheProvidertrue 使用OSCache配置二级缓存 挎贝oscache properties文件到类路径 项目工程的src目录下 这个文件在Hibernate安装目录的etc下 关于缓存中存放多少数据 Hibernate是不关心的 全部由OSCache来完成 在oscache properties中 有如下的参数配置 cache capacity 1000这个数值代表放入缓存的对象数量 这个数量根据用户机器的内存来配置 一般只需要配置这个参数即可 使用OSCache配置二级缓存 指定哪些实体类使用缓存 经过第一步缓存是启用了 但是并没有被使用 它不会去自动把所有的实体都进行缓存了 而是需要手动指定哪个实体需要缓存 以及其缓存的策略 这里有两种方式 第一种是修改要使用缓存的实体的映射文件 如在User hbm xml中使用标签启用 使用OSCache配置二级缓存 第二种方式是在hibernate cfg xml中使用标签指定实体类并启用 trueorg hibernate cache EhCacheProvider 二级缓存策略 usage设定 read only缓存的对象只可以读取 read write缓存的对象可读写 nonstrict read write非严格的读写 适合于并发更新的情况非常小 会出现一定的错误数据 即不同步数据 transaction事务缓存 可支持事务回滚 OSCache中没有此项功能 使用EhCache配置二级缓存 把ehcache 1 2 3 jar加入到当前应用的classpath中 修改hibernate cfg xml文件开启二级缓存 trueorg hibernate cache EhCacheProvidertrue 使用EhCache配置二级缓存 挎贝ehcache xml文件到类路径 项目工程的src目录下 这个文件在Hibernate安装目录的etc下 内容如下 使用EhCache配置二级缓存 指定哪些实体类使用缓存 经过第一步缓存是启用了 但是并没有被使用 它不会去自动把所有的实体都进行缓存了 而是需要手动指定哪个实体需要缓存 以及其缓存的策略 这里有两种方式 第一种是修改要使用缓存的实体的映射文件 如在User hbm xml中使用标签启用 使用EhCache配置二级缓存 第二种方式是在hibernate cfg xml中使用标签指定实体类并启用 trueorg hibernate cache EhCacheProvider 二级缓存示例 Customer使用读写二级缓存 执行下面一条时 Hibernate将产生一条SQLCustomercus Customer session get Customer class 1l 关闭Session的一级缓存清空 但二级缓存中仍保留有cus的数据session close 打开session再次获取Customer时 检查控制台并未产生一条SQL Hibernate此时并未从数据库中获取数据而是从二级缓存中获取 Customercus Customer session get Customer class 1l 二级缓存的适用范围 首先 不是所有的数据都适合放在二级缓存中 看一下 什么样的数据适合放在二级缓存中来 什么样的数据不适合放在二级缓存中来 下面这几种情况就不适合加载到二级缓存中 1 经常被修改的数据2 绝对不允许出现并发访问的数据3 与其他应用共享的数据下面这几种情况适合加载到二级缓存中 1 数据更新频率低2 允许偶尔出现并发问题的非重要数据3 不会被并发访问的数据4 常量数据5 不会被第三方修改的数据 查询缓存概述 Hibernate的二级缓存策略是针对ID查询的策略 和对象ID密切相关 那么对于条件查询就不适用了 因此 Hibernate引入了 查询缓存 启用查询缓存后 第一次执行查询时 Hibernate会把查询结果放入二级缓存中 以后再次执行该查询语句时 只需从缓存中获得查询结果 从而提高查询性能 查询缓存依赖二级缓存 查询实体对象结果集依赖 查询普通属性结果集不依赖 查询缓存的配置和使用 修改hibernate cfg xml文件开启查询缓存 trueorg hibernate cache EHCacheProvidertruetrue在程序中必须手动启用查询缓存 如 query setCacheable true 查询普通属性结果集测试查询实体对象结果集测试Hibernate查询缓存true与二级缓存fasle查询实体对象结果集测试Hibernate查询缓存true与二级缓存true查询实体对象结果集测试 编写以下程序测试查询缓存 查询缓存特点总结 查询缓存是针对普通属性结果集的缓存 个人推荐用这个 单独用查询缓存 对实体对象的结果集只缓存ID 这配合Hibernate二级缓存一起用 在查询普通属性结果集时查询缓存只对query list 起作用 query iterate 不起作用 在查询实体对象结果集时查询缓存对query list 和query iterate 都起作用 推荐无论查询普通属性结果集还是查询实体对象结果集 都要开启二级缓存和查询缓存 而且要使用query list 方法查询 查询缓存生命周期和适用场合 查询缓存的生命周期 当前关联的表发生修改 那么查询缓存生命周期结束 查询缓存适用于以下场合 在应用程序运行时经常使用的查询语句 用来查询那些不经常变更的数据 如数据字典 对象的状态 瞬时状态 transient 刚刚用new语句建立 还没有被持久化 不处于session的缓存中 持久化对象 persistent 已经被持久化 加入到session的缓存中 游离状态 detached 已经被持久化 但不再处于session的缓存中 对象状态的转换 对象的状态转换示例 Sessionsession sf getCurrentSession Transactiontx session beginTransaction Customercus newCustomer 瞬时状态cus setName Tony session save cus 持久化状态mit session close 修改游离态的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初二音乐上册试卷及答案
- 医疗工程电梯施工方案(3篇)
- 电网工程风险管控方案(3篇)
- 交通工程公司改制方案(3篇)
- 2025药店房屋租赁合同
- 工程预制管道施工方案(3篇)
- 皇岗口岸新建工程方案(3篇)
- 2025停车场铺装合同范本
- 工程资料两大方案(3篇)
- 向东水渠改造工程方案(3篇)
- 新转型九年一贯制学校三年发展规划(2025年-2028年)
- 维护秩序靠规则(课件) 2025-2026学年八年级道德与法治上册(统编版2024)
- 期神丁鹏期货交易课件
- 反走私课件教学课件
- 大货车闯红灯安全培训课件
- 2025秋教科版(2024)科学三年级上册教学设计(附目录)
- 2025年人教版三年级数学上册全册教案
- (2025秋新版)苏教版科学三年级上册全册教案
- 《中国人首次进入自己的空间站》导学案 部编语文八年级上册
- 烟花爆竹经营安全管理知识培训考核试题及答案
- 四川省土地开发项目预算定额标准
评论
0/150
提交评论