欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Hibernate缓存、对象状态.ppt

    • 资源ID:67326884       资源大小:466KB        全文页数:30页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Hibernate缓存、对象状态.ppt

    Hibernate缓存、对象状态教学内容教学内容n理解Hibrnate的缓存机制n理解对象的状态Hibernate的缓存的缓存nHibernate的缓存分为:一级缓存,单个会话的对象缓存。二级缓存,可插拔的缓存插件理解理解Session缓存缓存n当Session加载或保存一个对象时,如果Session的缓存中不存在相应的对象,hibernate就会把该对象加入到一级缓存中。n当再次通过Session加载相同OID的对象时,Hibernate将直接从Session的缓存中获取。n当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缓存的作用缓存的作用n减少访问数据库的频率。应用程序从内存中获取对象明显快于从数据库中查找。n保证缓存中的对象与数据库相关的记录同步。当处于缓存中的对象的属性发生改变时,Session不会立即更新数据库,它可以将多次更新合并处理后产生一条更新语句。Customercustomer=(Customer)session.get(Customer.class,1);customer.setName(jack);customer.setName(mike);session.update(customer);/以上只会产生一条sql语句。updateCustomersetname=mike.同步同步Session缓存缓存nHibernate会在特定的时间自动同步缓存与数据库当人为提交事务时,commit()方法先清理缓存,然后再向数据库提交事务。当执行session的查询方法时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。当执行session.flush时n注意:关闭Session时,Hibernate不会执行缓存同步。nevict(Objecto):从缓存中清除指定的对象nclear():清空缓存中的所有对象管理一级缓存管理一级缓存Hibernate二级缓存二级缓存n二级缓存是一个可以插拔的缓存插件,它由SessionFactory负责管理,由于SessionFactory对象的生命周期和应用程序的生命周期对应,因此二级缓存是进程范围或群集范围的缓存。n缓存中存放的是对象的散装数据而不是对对象的引用。可以被一个SessionFactory的所有sesison共享n二级缓存是可选的,可以在每个类或每个集合的粒度上配置二级缓存。Hibernate二级缓存的执行机制二级缓存的执行机制应用程序一级缓存(事务范围内的Session缓存)二级缓存(进程范围或群集范围的缓存)数据库写读写读n如果在事务范围的缓存(第1级缓存)中没有查询到相应的数据,还可以到进程范围或群集范围的缓存(第2级缓存)内查询,如果在进程范围或群集范围的缓存内也没有找到该数据,那么就只好查询数据库。写读n二级缓存是可配置的插件,Hibernate允许选用以下类型的缓存插件nEHCachenOSCachenSwarmCachenJBossCachen这些插件都是由第三方提供的。nHibernate2以前提倡用EHCachenHibernate3后提倡用OSCacheHibernate二级缓存的第三方实现二级缓存的第三方实现使用使用OSCache配置二级缓存配置二级缓存n把oscache-2.1.jar加入到当前应用的classpath中。n修改hibernate.cfg.xml文件开启二级缓存。trueorg.hibernate.cache.OSCacheProvidertrue使用使用OSCache配置二级缓存配置二级缓存n挎贝oscache.properties文件到类路径(项目工程的src目录下),这个文件在Hibernate安装目录的etc下。n关于缓存中存放多少数据,Hibernate是不关心的,全部由OSCache来完成。在oscache.properties中,有如下的参数配置:cache.capacity=1000n这个数值代表放入缓存的对象数量,这个数量根据用户机器的内存来配置,一般只需要配置这个参数即可。使用使用OSCache配置二级缓存配置二级缓存n指定哪些实体类使用缓存。经过第一步缓存是启用了,但是并没有被使用。它不会去自动把所有的实体都进行缓存了,而是需要手动指定哪个实体需要缓存,以及其缓存的策略。这里有两种方式,n第一种是修改要使用缓存的实体的映射文件。如在User.hbm.xml中使用标签启用。使用使用OSCache配置二级缓存配置二级缓存n第二种方式是在hibernate.cfg.xml中使用标签指定实体类并启用。trueorg.hibernate.cache.EhCacheProvider二级缓存策略二级缓存策略-usage设定设定nread-only缓存的对象只可以读取。nread-write缓存的对象可读写。nnonstrict-read-write非严格的读写,适合于并发更新的情况非常小(会出现一定的错误数据,即不同步数据)。ntransaction事务缓存,可支持事务回滚(OSCache中没有此项功能)。使用使用EhCache配置二级缓存配置二级缓存n把ehcache-1.2.3.jar加入到当前应用的classpath中。n修改hibernate.cfg.xml文件开启二级缓存。trueorg.hibernate.cache.EhCacheProvidertrue使用使用EhCache配置二级缓存配置二级缓存n挎贝ehcache.xml文件到类路径(项目工程的src目录下),这个文件在Hibernate安装目录的etc下。内容如下:使用使用EhCache配置二级缓存配置二级缓存n指定哪些实体类使用缓存。经过第一步缓存是启用了,但是并没有被使用。它不会去自动把所有的实体都进行缓存了,而是需要手动指定哪个实体需要缓存,以及其缓存的策略。这里有两种方式,n第一种是修改要使用缓存的实体的映射文件。如在User.hbm.xml中使用标签启用。使用使用EhCache配置二级缓存配置二级缓存n第二种方式是在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);二级缓存的适用范围二级缓存的适用范围n首先,不是所有的数据都适合放在二级缓存中,看一下,什么样的数据适合放在二级缓存中来?什么样的数据不适合放在二级缓存中来?n下面这几种情况就不适合加载到二级缓存中:n1.经常被修改的数据n2.绝对不允许出现并发访问的数据n3.与其他应用共享的数据n下面这几种情况适合加载到二级缓存中:n1.数据更新频率低n2.允许偶尔出现并发问题的非重要数据n3.不会被并发访问的数据n4.常量数据n5.不会被第三方修改的数据查询缓存概述查询缓存概述nHibernate的二级缓存策略是针对ID查询的策略,和对象ID密切相关,那么对于条件查询就不适用了。因此,Hibernate引入了“查询缓存”。n启用查询缓存后,第一次执行查询时,Hibernate会把查询结果放入二级缓存中;以后再次执行该查询语句时,只需从缓存中获得查询结果,从而提高查询性能。n查询缓存依赖二级缓存(查询实体对象结果集依赖,查询普通属性结查询实体对象结果集依赖,查询普通属性结果集不依赖果集不依赖)。查询缓存的配置和使用查询缓存的配置和使用n修改hibernate.cfg.xml文件开启查询缓存。trueorg.hibernate.cache.EHCacheProvidertruetruen在程序中必须手动启用查询缓存,如:nquery.setCacheable(true);n查询普通属性结果集测试查询普通属性结果集测试n查询实体对象结果集测试查询实体对象结果集测试nHibernate查询缓存查询缓存true与与二级缓存二级缓存fasle查询实体对象结果集测试查询实体对象结果集测试nHibernate查询缓存查询缓存true与与二级缓存二级缓存true查询实体对象结果集测试查询实体对象结果集测试编写以下程序测试查询缓存编写以下程序测试查询缓存查询缓存特点总结查询缓存特点总结n查询缓存是针对普通属性结果集的缓存个人推荐用这个,单独用查询缓存。n对实体对象的结果集只缓存ID,这配合Hibernate二级缓存一起用。n在查询普通属性结果集时查询缓存只对query.list()起作用,query.iterate()不起作用。n在查询实体对象结果集时查询缓存对query.list()和query.iterate()都起作用。n推荐无论查询普通属性结果集还是查询实体对象结果集,都要开启二级缓存和查询缓存,而且要使用query.list()方法查询。查询缓存生命周期和适用场合查询缓存生命周期和适用场合n查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束。n查询缓存适用于以下场合:n在应用程序运行时经常使用的查询语句。n用来查询那些不经常变更的数据,如数据字典。对象的状态对象的状态n瞬时状态(transient):刚刚用new语句建立,还没有被持久化,不处于session的缓存中。n持久化对象(persistent):已经被持久化,加入到session的缓存中。n游离状态(detached):已经被持久化,但不再处于session的缓存中。对象状态的转换对象状态的转换对象的状态转换示例对象的状态转换示例Sessionsession=sf.getCurrentSession();Transactiontx=session.beginTransaction();Customercus=newCustomer();/瞬时状态瞬时状态cus.setName(Tony);session.save(cus);/持久化状态mit();session.close();/修改游离态的Customer对象cus.setName(ModTonyName);Sessionsession2=sf.getCurrentSession();Transactiontxb=session2.beginTransaction();session2.update(cus);/关联游离态的对象mit();/保存更新session2.close();总结总结q一级缓存的作用qHibernate同步缓存的时间点q二级缓存的作用,如何设置二级缓存q对象的状态有那些,它们之间如何转换

    注意事项

    本文(Hibernate缓存、对象状态.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开