<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      淺談HIbernate緩存

      淺談HIbernate緩存

      緩存的概念

        緩存:是計算機領(lǐng)域的概念,它介于應(yīng)用程序和永久性數(shù)據(jù)存儲源之間

        緩存:一般人的理解就是在內(nèi)存中的一塊空間,其實也可以將二級緩存配置到硬盤。用白話來說就是一個存儲數(shù)據(jù)的容器。我們關(guān)注的是那些數(shù)據(jù)需要放入二級緩存

        緩存的作用:降低應(yīng)用程序直接讀取數(shù)據(jù)庫的頻率。從而提高程序運行性能。緩存中的數(shù)據(jù)就是數(shù)據(jù)存儲源中的數(shù)據(jù)的Copy。緩存的介質(zhì)通常是內(nèi)存

        

       

      Hibernate一級緩存

           Hibernate一級緩存特點

         

         a.使用一級緩存的目的是為了減少對數(shù)據(jù)庫的訪問次數(shù),從而提升hibernate的執(zhí)行效率;(當(dāng)執(zhí)行一次查詢操作的時候,執(zhí)行第二次查詢操作,先檢查緩存中是否有數(shù)據(jù),

          如果有數(shù)據(jù)就不查詢數(shù)據(jù)庫,直接從緩存中獲取數(shù)據(jù));

              b.Hibernate中的一級緩存,也叫做session的緩存,它可以在session范圍內(nèi)減少數(shù)據(jù)庫的訪問次數(shù),只在session范圍內(nèi)有效,session關(guān)閉,一級緩存失敗;

        c.只在session范圍有效,作用時間短,效果不是特別明顯,在短時間內(nèi)多次操作數(shù)據(jù)庫,效果比較明顯。

        d.當(dāng)調(diào)用session的save/saveOrUpdate/get/load/list/iterator方法的時候,都會把對象放入session緩存中;

        e.一級緩存是默認啟用的,你不能讓他失效

        驗證一級緩存的存在

          

       1   Transaction transaction = null;
       2     Session session = null;
       3 
       4 
       5     @Before
       6     public void before() {
       7 
       8         session = (Session) SessionFactoryUtil.getCurrentSession();
       9         //開啟事務(wù)
      10         transaction = session.beginTransaction();
      11     }
      12    
      13 @Test
      14     public void testCache1() {
      15         Dept dept = (Dept) session.get(Dept.class, 1);
      16         System.out.println("=============緩存分界線=============");
      17         System.out.println("查詢一樣的數(shù)據(jù)");
      18         Dept dept2 = (Dept) session.get(Dept.class, 1);
      19         System.out.println("===================================");
      20         System.out.println("查詢不一樣的數(shù)據(jù)");
      21         Dept dept3 = (Dept) session.get(Dept.class, 2);
      22     }
      23 
      24 
      25  @After
      26     public void close() {
      27         //提交食物
      28         transaction.commit();
      29     }

        查詢結(jié)果

        

              可以看見第二次執(zhí)行一樣的查詢語句是并沒有生產(chǎn)新的SQL語句。這是因為第一次執(zhí)行時會先去一級緩存中找數(shù)據(jù)如果沒有的話在和數(shù)據(jù)庫交互。然后把在數(shù)據(jù)庫查詢的結(jié)果放入到

       一級緩存之中第二次在查詢一樣的數(shù)據(jù)時當(dāng)走到一級緩存的時候直接使用不用在和數(shù)據(jù)交互。

           執(zhí)行原理圖

       

      HIbernate二級緩存

        HIbernate二級緩存概念

             我們知道一級緩存,并且一級緩存的作用范圍就在session中,每個session都有一個自己的一級緩存,而二級緩存也就是比一級緩存的作用范圍更廣,存儲的內(nèi)容更多,我們知道session是由sesssionFactory創(chuàng)建出來的,一個sessionFactory能夠創(chuàng)建很多個session,每個session有自己的緩存,稱為一級緩存,而sessionFactory也有自己的緩存,存放的內(nèi)容供所有session共享,也就是二級緩存。

           圖解

       

          Hibernate二級緩存配置

          Hibernate二級緩存不同于一級緩存需要我們手動配置

          1.pom文件引入需要的jar

          

      <!--配置需要的ehcahe插件-->
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
          <version>1.2.3</version>
      </dependency>
      
      <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-ehcache</artifactId>
          <version>3.6.10.Final</version>
      </dependency>

                  2.在cfg.xml文件配置相關(guān)節(jié)點

      <!--開啟hibernate需要的2級緩存-->
      <property name="cache.use_second_level_cache">true</property>
      <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

        3.引入需要的緩存配置文件(resources文件夾下)

      <ehcache>
          <!-- 默認的臨時文件-->
          <diskStore path="java.io.tmpdir"/>
          <defaultCache
                  maxElementsInMemory="10000"
                  eternal="false"
                  timeToIdleSeconds="120"
                  timeToLiveSeconds="120"
                  overflowToDisk="true"
                  memoryStoreEvictionPolicy="LRU"
                  />
      </ehcache>

      1.在hibernarte.cfg.xml中加入兩個<property>

         2.1  hibernate.cache.use_second_level_cache  true

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

           2.配置二級緩存的供應(yīng)商

           <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

       3.設(shè)置你要緩存的類以及他的策略

          <class-cache class="cn.happy.entity.Dept" usage="read-write"></class-cache>、

       4.在resource目錄下添加一個文件 ehcache.xml文件

       驗證HIbernate二級緩存的存在

      @Test
          public void testCache2() {
              System.out.println("===========前==========");
              Dept dept = (Dept) session.get(Dept.class, 1);
              session.close();
              System.out.println("===========后=========");
              session = (Session) SessionFactoryUtil.getCurrentSession();
              //開啟事務(wù)
              transaction = session.beginTransaction();
              dept = (Dept) session.get(Dept.class, 1);
              System.out.println(dept);
      
          }

      執(zhí)行結(jié)果

       

       HIbernate二級緩存執(zhí)行原理

            首先,當(dāng)我們使用Hibernate從數(shù)據(jù)庫中查詢出數(shù)據(jù),獲取檢索的數(shù)據(jù)后,Hibernate將檢索出來的對象的OID放入緩存中key 中,然后將具體的POJO放入value中,

       

      等待下一次再次向數(shù)據(jù)查詢數(shù)據(jù)時,Hibernate根據(jù)你提供的OID先檢索一級緩存,若有且配置了二級緩存,則檢索二級緩存,如果還沒有則才向數(shù)據(jù)庫發(fā)送SQL語句,然后將查詢出來的對象放入緩存中。

       

       

       

      posted @ 2018-11-01 16:04  小白裝大神  閱讀(249)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人精品中文字幕| 日韩熟妇| 久久精品国产亚洲夜色av| 中文字幕在线精品视频入口一区| 99久久久无码国产精品免费 | 欧美激情内射喷水高潮| 四虎国产成人永久精品免费| 最新精品国偷自产在线| 国产成人精品亚洲午夜| 人人妻人人妻人人片av| 又黄又爽又色的少妇毛片| 国产精品色内内在线播放| 亚洲综合精品中文字幕| 色成人亚洲| 麻豆成人久久精品二区三| 精品国产亚洲一区二区三区在线观看| 色综合久久综合中文综合网| 久激情内射婷内射蜜桃| 国产精品黄色大片在线看| 鲁丝片一区二区三区免费| 欧美性猛交xxxx乱大交丰满| 国产区成人精品视频| 国产精品成人高潮av| 国产一区国产二区在线视频| 国产999久久高清免费观看| 国产精品高清国产三级囯产AV| 国产在线啪| 极品人妻少妇一区二区| 亚洲欧美综合中文| 97se亚洲国产综合自在线观看| 亚洲av无码一区二区三区网站| 狠狠人妻久久久久久综合蜜桃| 蜜桃成熟色综合久久av| 久久99国产精品尤物| 中国熟妇牲交视频| 色综合天天色综合久久网| 色噜噜久久综合伊人一本| 国产精品日韩专区第一页| 久久精品人成免费| 成人午夜无人区一区二区| 在线播放深夜精品三级|