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"/>

  • 相关阅读:
    Windows API 之 Windows Service
    揭开Socket编程的面纱 (一)
    开发中“错误: 意外地调用了方法或属性访问。” 和 第一行错误 的IE 两个问题( JQ 进行转义字符 , 分页JS 调用 时参数问题。)
    结合MSDN理解windows service 服务安装的三个类。
    VFW基础知识(一些定义性质的。从CSDN中得到的。)
    初次接触WIN FORM,深入事件、委托、方法 ,深入看不到的C#探索。
    C#: +(特性 ) + Attitude C#(类)前面或者(方法)前面 (中括号)定义
    VFW系列教程经典
    依赖注入
    Windows Service:SC 和 InstallUtil 区别
  • 原文地址:https://www.cnblogs.com/liang67732116/p/5819008.html
Copyright © 2011-2022 走看看