1. 程式人生 > >hibernate中的三級快取與載入

hibernate中的三級快取與載入

首先說JCS;

JCS:指的是java cache system

JCS中是依據物件中的唯一標示進行儲存 儲存結構為map結構

為什麼要說JCS呢,因為hibernate的快取二級快取與JCS密切相關,

1.什麼是三級快取呢?

        一級快取:指的是Session快取,基於執行緒的快取

        二級快取 指的是SessionFactory的快取,是基於程序的快取 (由於SessionFactory的宣告週期和程式的宣告週期是相同的,並且是單例的)

                 二級快取又分為內建快取和外接快取

                      內建快取是hibernate中自己編寫的

                      外接快取是hibernate藉助第三方外掛的快取

                               外接快取又分為class快取和查詢快取

                                       這兩種快取都採用的是map結構,前者的key儲存的是sql語句的字串,value儲存的是主鍵id的集合

                                                                                                   後者的key儲存的是id,value儲存的是id所對應的某一條記錄封裝後的物件

       三級快取 :指的是外接快取中的查詢快取

                 由於查詢快取依賴於class快取,所以說三級快取是基於二級快取之上的.

 好吧,講了這麼多,快取相信也講的很明瞭了吧,接下來說說資料的載入吧,資料的載入與快取有關係的,所以先講述了三級快取機制

    載入機制分為兩類:

                                       一,即時載入  ,

                                                  list方法:傳送sql語句,將會返回所有相關的資料,並進行快取

                                                 get方法,利用物件的id,然後去一級快取中找,如果有返回,否則去二級快取中找,如果有返回,否則直接去資料庫查詢

                                     二.    延時載入(在hibernate中也成為懶載入)

                                                   iterator方法傳送sql語句,將會返回所記錄的id集合,如果需要檢視相應的屬性值,則回去二級快取的class快取中根據id進行查詢,如果沒有,                                                 才會去資料庫中根據id查詢

                                                   load方法 利用物件的id,然後去一級快取中找,如果有則返回,如果沒有,則不再去二級快取中尋找,預設有,會返回物件的代理物件,如果查                                                   看物件屬性的的話,才去二級快取查詢,如果沒有再去根據id進行資料庫訪問