1:Hibernate的一級緩存:
1.1:使用一級緩存的目的是為了減少對資料庫的通路次數,進而提升hibernate的執行效率;(當執行一次查詢操作的時候,執行第二次查詢操作,先檢查緩存中是否有資料,如果有資料就不查詢資料庫,直接從緩存中擷取資料);
1.2:Hibernate中的一級緩存,也叫做session的緩存,它可以在session範圍内減少資料庫的通路次數,隻在session範圍内有效,session關閉,一級緩存失敗;
1.3:一級緩存的特點,隻在session範圍有效,作用時間短,效果不是特别明顯,在短時間内多次操作資料庫,效果比較明顯。
1.4:當調用session的save/saveOrUpdate/get/load/list/iterator方法的時候,都會把對象放入session緩存中;
1.5:session的緩存是由hibernate維護的,使用者不能操作緩存内容;如果想操作緩存内容,必須通過hibernate提供的evict/clear方法操作
1.6:緩存相關的方法(在什麼情況下使用上面方法呢?批量操作情況下使用,如Session.flush();先與資料庫同步,Session.clear();再清空一級緩存内容):
session.flush();讓一級緩存與資料庫同步;
session.evict();清空一級緩存中指定的對象;
session.clear();清空一級緩存中所有的對象;
1.7:面試題,不同的session是否會共享緩存資料?
答:不會哦~~~
1.8:list和iterator的差別?
(1)list查詢:
答: 一次性把所有的記錄都查詢出來了;會放入緩存,不會從緩存中取資料;
(2)iterate(N+1次查詢):
答: N表示所有的記錄總數,即會發送一條語句查詢所有的記錄的主鍵,這是第一條查詢語句,再根據每一個主鍵取資料庫查詢,這是根據第一次查詢的條數進行N次查詢操作;會放入緩存,也會從緩存中取出資料;
2:Hibernate的懶加載:
2.1:懶加載概念:當用到資料的時候才向資料庫查詢,這就是hibernate的懶加載特性。
使用懶加載的目的,是提高程式執行效率。
2.2:查詢操作:get()方法/load()方法
(1)get()方法,及時加載。及時查詢操作;隻要調用get方法立刻向資料庫查詢。
(2)load()方法,預設懶加載,即在使用資料的時候,才向資料庫發送查詢的sql語句。session關閉以後,不可以使用懶加載。
2.3:懶加載異常:
Session關閉後,不能使用懶加載資料,如果session關閉後,使用懶加載資料報錯如:
如何解決session關閉後不能使用懶加載加載資料的問題:
方式一:可以先在關閉session之前使用一下資料,這樣關閉以後就可以使用此資料了。如Dept.getDeptName();
方式二(推薦):強迫代理對象初始化操作:Hibernate.initialize(對象);
方式三:關閉懶加載(lazy="false");
方式四(推薦):在使用資料之後再關閉session;
3:二級緩存:
Hibernate提供的緩存 有一級緩存、二級緩存。 目的是為了減少對資料庫的通路次數,提升程式執行效率! 一級緩存: 基于Session的緩存,緩存内容隻在目前session有效,session關閉,緩存内容失效! 特點: 作用範圍較小! 緩存的事件短。 緩存效果不明顯。
3.1:二級緩存概述:
二級緩存:
Hibernate提供了基于應用程式級别的緩存即為二級緩存,可以跨多個session,即不同的session都可以通路緩存資料。 這個緩存也叫二級緩存。
Hibernate提供的二級緩存有預設的實作,且是一種可插配的緩存架構!如果使用者想用二級緩存,隻需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影響代碼。
如果使用者覺得hibernate提供的架構架構不好用,自己可以換其他的緩存架構或自己實作緩存架構都可以。
3.2:檢視hibernate.properties配置檔案,二級緩存如何配置?
3.3:二級緩存,使用步驟:
1) 開啟二級緩存;
2)指定緩存架構;
3)指定那些類加入二級緩存;
4)測試;
3.4:緩存政策: