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

    04_域模型的3种状态与hibernate缓存.ppt

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

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

    04_域模型的3种状态与hibernate缓存.ppt

    域对象在持久化层的三种状态 n教学内容nSession的缓存的作用nSession清理缓存的时间点n对象的临时状态、持久化状态和游离状态n用Session的update()方法使游离对象转变为持久化对象 理解Session的缓存 n当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。n当Session的load()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索。理解Session的缓存 tx=session.beginTransaction();Customer c1=new Customer(Tom,new HashSet();/Customer对象被持久化,并且加入到Session的缓存中session.save(c1);Long id=c1.getId();/c1变量不再引用Customer对象c1=null;/从Session缓存中读取Customer对象,使c2变量引用Customer对象Customer c2=(Customer)session.load(Customer.class,id);mit();/关闭Session,清空缓存session.close();/访问Customer对象System.out.println(c2.getName();/c2变量不再引用Customer对象,此时Customer对象结束生命周期。c2=null;理解Session的缓存 tx=session.beginTransaction();Customer c1=(Customer)session.load(Customer.class,new Long(1);Customer c2=(Customer)session.load(Customer.class,new Long(1);System.out.println(c1=c2);mit();session.close();Session的缓存的作用n(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。n(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。Session清理缓存n清理缓存是指按照缓存中对象的状态的变化来同步更新数据库n以下程序代码对Customer的name属性修改了两次:tx=session.beginTransaction();Customer customer=(Customer)session.load(Customer.class,new Long(1);customer.setName(Jack);customer.setName(Mike);mit();n当Session清理缓存时,只需执行一条update语句:update CUSTOMERS set NAME=Mike where ID=1;清理缓存的时间点nSession会在下面的时间点清理缓存:n当应用程序调用net.sf.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。n当应用程序调用Session的find()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。n当应用程序显式调用Session的flush()方法的时候。Hibernate的二级缓存结构 nHibernate提供了两级缓存,第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有惟一的OID。n第二级缓存是一个可插拔的缓存插件,它由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围或群集范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。Hibernate的二级缓存结构 2级缓存是可配置的插件 Hibernate的第2级缓存是可配置的插件,允许采用以下类型的插件nEHCache:可以作为进程范围内的缓存,存放的数据的物理介质可以是内存或者硬盘,对hibernate的查询缓存提供了支持nOSCache:可以作为进程范围内的缓存,存放的数据的物理介质可以是内存或者硬盘,提供了丰富的缓存过期策略,对hibernate的查询缓存提供了支持nSwarmCache:可以作为机群范围内的缓存,但不支持Hibernate查询缓存nJBossCache:可以作为机群范围内的缓存,支持事物型并发访问策略,支持Hibernate查询缓存 2级缓存的策略n进程级别 Hibernate还允许在类和集合的粒度上设置第2级缓存,在映射文件中,元素中都一个子元素,这个子元素可用来配置第2级缓存 n集群级别配置集群级别的2级缓存,只能使用JBossCache 在Hibernate应用中Java对象的状态 n临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。n持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。n游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。对象的状态转换图 Customer对象的状态转换过程 用Session的update()方法关联游离对象 Customer customer=new Customer();customer.setName(Tom);Session session1=sessionFactory.openSession();Transaction tx1=session1.beginTransaction();session1.save(customer);mit();session1.close();/此时Customer对象变为游离对象Session session2=sessionFactory.openSession();Transaction tx2=session2.beginTransaction();customer.setName(Linda)/在和session2关联之前修改Customer对象的属性session2.update(customer);customer.setName(Jack);/在和session2关联之后修改Customer对象的属性mit();session2.close();Session的update()方法nSession的update()方法完成以下操作:n(1)把Customer对象重新加入到Session缓存中,使它变为持久化对象。n(2)计划执行一个update语句。值得注意的是,Session只有在清理缓存的时候才会执行update语句,并且在执行时才会把Customer对象当前的属性值组装到update语句中。因此,即使程序中多次修改了Customer对象的属性,在清理缓存时只会执行一次update语句。客户层与业务逻辑层之间传递临时对象和游离对象的过程客户层与业务逻辑层之间传递临时对象和游离对象的过程

    注意事项

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

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




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

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

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

    收起
    展开