Hibernate的一級緩存看法

Hibernate一級緩存: sql

Hibernate中的一級緩存的理解,一共進行了三次查詢。 數據庫

第一次由於緩存中沒有數據因此會去查詢數據庫,會發出sql語句; 緩存

第二次由於在同一個session中,因此能夠使用hibernate的一級緩存,因此不發出sql語句(即沒有查詢數據庫); session

第三次由於hibernate的一級緩存只能在同一個session中共享數據,因此hibernate到數據庫中去查詢數據,會發出sql語句。 spa

 

public void firstCacheOfSession(){
  Test test = null;
  Session session = null;
  
  try {
   session = HibernateSessionFactory.getSession();
   session.beginTransaction();
   
   //第一次會發出sql語句,由於沒有緩存中沒有數據要去數據庫中查詢
   test = (Test) session.get(Test.class, 1);
   System.out.println("first :"+test.getName());
   
   //第二次不會發出sql語句,由於在同一個session中,能夠到hibernate的一級緩存中取數據
   test = (Test) session.get(Test.class, 1);
   System.out.println("Second :"+test.getName());
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   session.close();
  }
  
  
  try {
   session = HibernateSessionFactory.getSession();
   session.beginTransaction();
   
   //第三次會發出sql語句,由於hibernate一級緩存中的數據只能在同一個session中共享,因此在新的session中不能使用hibernate的一級緩存數據。
   test = (Test) session.get(Test.class, 1);
   System.out.println("Third :"+test.getName());
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   session.close();
  }
 } hibernate

 Hibernate二級緩存: 生命週期

Hibernate二級緩存也稱爲進程級的緩存或SessionFactory級的緩存。二級緩存是全局緩存,它能夠被全部的session共享。二級緩存的生命週期和SessionFactory的生命週期一致,SessionFactory能夠管理二級緩存。
使用hibernate的二級緩存後結果如圖(配置另見hibernate二級緩存配置文章中,再次就不作介紹了): 進程

能夠看到使用了二級緩存後只發出了一條sql語句,是由於二級緩存是將數據存入了SessionFactory中,因此即便在不一樣的session中也可共享數據。 get

相關文章
相關標籤/搜索