zoukankan      html  css  js  c++  java
  • Hibernate 和 快照

    Hibernate我们已经学了四天,该讲的知识我们已经讲完,明天放假,后天练习一天就要结束hibernate的学习,有点不舍的,想来hibernate也不是传说中的那么难,在次将hibernate中三个比较重要的概念在次总结一下。

    hibernate存在2个缓存

      * 第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存(session的一级缓存)

      * 第二级别的缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存(二级缓存

    session的一级缓存

       * 使用hibernate进行查询的时候,将查询结果放置到session的一级缓存中,在一级缓存中存在对象,对象使用属性的OID的值进行区分,此时再使用相同的OID进行查询的时候,首先会在session一级缓存中进行查找是否存在相同的OID

    * 如果存在相同的OID,此时不再查询数据库,而是直接使用一级缓存中存在的对象

    * 如果没有存在相同的OID,此时再查询数据库,将查询得到的结果数据再放置到session一级缓存中

    目的:减少访问数据库的次数

    session的快照

    * 使用id进行查询数据库,将查询得到的结果放置到session一级缓存中,同时复制一份数据,放置到session的快照中

    * 当使用tr.commit()的时候,同时清理session的一级缓存(flush)

    * 当清理session一级缓存的时候,会使用OID判断一级缓存中对象和快照中的对象进行比对

    * 如果2个对象(一级缓存的对象和快照的对象)中的属性发生变化,则执行update语句,此时更新数据库,更新成一级缓存中的数据

    * 如果2个对象中的属性不发生变化,此时不执行update语句

    目的:确保和数据库中的数据一致                                                            

    Session二级缓存

    二级缓存

       一个可配置的缓存插件包括类级别的缓存区域,集合级别的缓存区域,查询级别的缓存区域,时间戳级别的缓存区域

    其使用步骤大致如下:

    1 拷贝ehcache-1.5.0.jar到当前工程的lib目录下

    2 开启二级缓存

       <property name="hibernate.cache.use_second_level_cache">true</property>

    3 要指定缓存的供应商

       <property name="hibernate.cache.provider_class">

                  org.hibernate.cache.EhCacheProvider</property>

    4 指定使用二级缓存的类

        * 方法一 在使用类的*.hbm.xml配置

    选择需要使用二级缓存的持久化类, 设置它的二级缓存的并发访问策略, <class> 元素的 cache 子元素表明 Hibernate 会缓存对象的简单属性, 但不会缓存集合属性, 若希望缓存集合属性中的元素, 必须在 <set> 元素中加入 <cache> 子元素

    方法二  在hibernate.cfg.xml文件中配置(建议)

          <!-- 指定使用二级缓存的类放在maping下面 -->

          <!-- 配置类级别的二级缓存 -->

          <class-cache class="cn.itcast.c3p0.Customer" usage="read-write"/>

          <class-cache class="cn.itcast.c3p0.Order" usage="read-write"/>

        <!-- 配置集合级别的二级缓存 -->

        <collection-cache  collection="cn.itcast.c3p0.Customer.orders"

                                       usage="read-write"/>

    •    5  配置ehcache默认的配置文件ehcache.xml(名字固定)(放在类路径下)

    上网看了下,说是hibernate中一级缓存、快照、二级缓存面试的时候问得比较多,感觉老师讲的很不透,所以自己总结了一下。

  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/6zhi/p/5818595.html
Copyright © 2011-2022 走看看