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

Hibernate <查詢緩存>,hibernate查詢緩存

編輯:Oracle教程

Hibernate <查詢緩存>,hibernate查詢緩存


查詢緩存:

  定義:查詢緩存它是基於二級緩存的,可以保存普通屬性查詢的結果,查詢對象實體時,他會保存id作為鍵,查詢結果作為值,下個對象訪問時,可以直接查到

      查詢緩存查詢實體對象時,顯著的特點是,會執行多條查詢id查詢語句

  生命周期:當關聯的表發生修改,查詢緩存的生命周期結束

  查詢緩存的配置和使用:

    1.修改hibernate.cfg   

1 <!-- 開啟查詢緩存 默認為false -->
2         <property name="hibernate.cache.use_query_cache">false</property>

    2.關聯實體類跟二級緩存配置一樣的

    3.在程序中啟用:

      query.setCacheable(true);

  開啟查詢緩存,關閉二級查詢的情況下:

 1 public void seleCacheTest(){
 2         try {
 3             session=HibernateUtil.currentSession();
 4             session.beginTransaction();
 5             List grade=session.createQuery("select g from Grade g")
 6                                 .setCacheable(true)
 7                                 .list();
 8             for(int i=0;i<grade.size();i++){
 9                 Grade grad=(Grade)grade.get(i);
10                 System.out.println(grad.getGradename());
11             }
12             
13         } catch (Exception e) {
14             // TODO: handle exception
15         }finally{
16             HibernateUtil.closeSession();
17             
18         }
19         System.out.println("-------------");
20         try {
21             session=HibernateUtil.currentSession();
22             session.beginTransaction();
23             List grade=session.createQuery("select g from Grade g")
24                                 .setCacheable(true)
25                                 .list();
26             for(int i=0;i<grade.size();i++){
27                 Grade grad=(Grade)grade.get(i);
28                 System.out.println(grad.getGradename());
29             }
30             
31         } catch (Exception e) {
32             // TODO: handle exception
33         }finally{
34             HibernateUtil.closeSession();
35             
36         }
37         
38     }

 

    總結:

      itetator不支持查詢緩存

      list 開啟查詢緩存時,關閉二級緩存:

         在不同session中:第二次查詢時,會發出n條查詢id

         同一session中時,由於一級緩存的作用:所以無論有沒有開啟查詢緩存都只有一條查詢語句  

      list開啟查詢緩存時,開啟二級緩存時:

         只執行一條查詢語句,因為二級緩存生效了

 

    在緩存知識點中需要注意的:

      緩存不能隨便用,盡量不用!

      在使用緩存時,還需要考慮到髒數據的問題!

      各級緩存的特點:

        一級緩存,save,get,load,query時都會產生緩存,這是無法禁止的

        二級緩存,二級緩存跨session操作,性能比較好,但是不能查詢普通屬性

        查詢緩存,以鍵值對方式存放緩存,必須在程序中創建

        

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