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