程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 初識Hibernate 緩存,初識hibernate緩存

初識Hibernate 緩存,初識hibernate緩存

編輯:JAVA綜合教程

初識Hibernate 緩存,初識hibernate緩存


    生活就像一杯咖啡,讓你我慢慢的品嘗,品嘗它的苦澀和甘甜......

一、什麼是Hibernate緩存。

   解析:白話來說就是緩存數據的容器

      官方標准點緩存:是計算機領域的概念,它介於應用程序和永久性數據存儲源之間。

      作用:降低應用程序直接讀寫數據庫的頻率,從而提高程序的運行性能。緩存中的數據是數據存儲源中數據的拷貝。緩存的物理介質通常是內存。

二、緩存一般分為三個類

  一級緩存

  二級緩存

  查看緩存

三、一級緩存

場景一:使用同一個session連續查詢兩次同一個對象

/查詢學生信息
    public static void select(){
        
        //由班級查詢該班級學生信息
        Session session=HibernateUtil.currentSession();
        Grade grade=(Grade) session.get(Grade.class, 14);
        //輸出班級信息
        System.out.println(grade.getGname());
        Grade grade2=(Grade) session.get(Grade.class, 14);
        //輸出班級信息
        System.out.println(grade2.getGname());
    }

執行結果:

場景一:在第一次查詢完畢後,關閉session對象,重新開啟一個session然後繼續查詢同一個對象

//查詢學生信息
    public static void select(){
        
        //由班級查詢該班級學生信息
        Session session=HibernateUtil.currentSession();
        Grade grade=(Grade) session.get(Grade.class, 14);
        //輸出班級信息
        System.out.println(grade.getGname());
        //關閉session
        HibernateUtil.closeSession();
        //重新獲取session
        session=HibernateUtil.currentSession();
        Grade grade2=(Grade) session.get(Grade.class, 14);
        //輸出班級信息
        System.out.println(grade2.getGname());
    }

執行結果:

 

解析:

   1:當我沒有關閉session時用的同一個session兩次訪問同一個對象時,只會向DB端發送一條sql語句
    * 原因:因為我第一次訪問數據庫的時候Hibernate會自動的將我查詢出來的結果保留一份查詢出來的對象到一級緩存
          並且這個額對象是根據OID唯一標識的,也可以理解為數據庫中的主鍵值,然後當我再一次訪問一個對象時,Hibernate
        機制會自動的先去一級緩存中查找看有沒有OID與我要查詢的OID相同的對象,如果有的話,則直接從一級緩存中 拿數據
          如果沒有相同的OID則說明緩存中沒有我要的記錄,那麼就會直接去訪問DB端了,這樣的話,又會重新發送一條sql
    2:當我第一次查詢完數據後立即關閉session,這時重新開啟一個session來訪問同一個對象,這時我們會發現它居然向數據庫發送了兩條Sql語句。這是為什麼呢?
    * 原因:其實原因很簡單,因為我們雖然說是訪問的同一個對象,但是我們隨即就關閉了這個session而重新開啟了一個session,

        此時我們訪問時的session是不一致的也就是說是兩個不同的session發出的請求,這樣理解的話,我們就不難理解了。

          所以總結出,一級緩存是一個會話級別的緩存,當一次回話結束後該會話裡的緩存則會全部的銷毀,所有我們自然就只能重新發送一條sql啦。

3補充以下方法支持一級緩存

 

 

 四、二級緩存

(一)配置二級緩存 

  1.引入如下jar包。

        ehcache-1.2.3.jar  核心庫

        backport-util-concurrent.jar

        commons-logging.jar

  2.配置Hibernate.cfg.xml開啟二級緩存

       <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元素的子元素下添加chche子節點,但該配置僅會緩存對象的簡單屬性,若希望緩存集合屬性中的元素,必須在set元素中添加<cache>子元素

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved