hibernate快取機制詳細分析

2021-07-13 12:59:41 字數 662 閱讀 3815

在本篇隨筆裡將會分析一下hibernate的快取機制,包括一級快取(session級別)、二級快取(sessionfactory級別)以及查詢快取,當然還要討論下我們的n+1的問題。

隨筆雖長,但我相信看完的朋友絕對能對hibernate的 n+1問題以及快取有更深的了解。

一、n+1問題

首先我們來**一下n+1的問題,我們先通過乙個例子來看一下,什麼是n+1問題:

list()獲得物件:

那麼這種 n+1 問題我們如何解決呢,其實我們只需要使用 list() 方法來獲得物件即可。但是既然可以通過 list() 我們就不會出現 n+1的問題,那麼我們為什麼還要保留 iterator()這種形式呢?我們考慮這樣一種情況,如果我們需要在乙個session當中要兩次查詢出很多物件,此時我們如果寫兩條 list()時,hibernate此時會發出兩條 sql 語句,而且這兩條語句是一樣的,但是我們如果第一條語句使用 list(),而第二條語句使用 iterator()的話,此時我們也會發兩條sql語句,但是第二條語句只會將查詢出物件的id,所以相對應取出所有的物件而已,顯然這樣可以節省記憶體,而如果再要獲取物件的時候,因為第一條語句已經將物件都查詢出來了,此時會將物件儲存到session的一級快取中去,所以再次查詢時,就會首先去快取中查詢,如果找到,則不發sql語句了。這裡就牽涉到了接下來這個概念:hibernate的一級快取。

hibernate快取機制

hibernate的快取機制 首先引入快取的目的 hibernate 在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可以大大減少應用程式對物理資料來源的訪問,使得程式的執行效能明顯的提公升.什麼是快取 快取是位於應...

Hibernate快取機制

hibernate快取分類 session快取,一級快取.sessionfactory的快取分為內建快取和外接快取.內建快取中存放的是sessionfactory物件的一些集合屬性包含的資料 對映元素據及預定義sql語句等 對於應用程式來說,它是唯讀的.外接快取中存放的是資料庫資料的副本,其作用和一...

Hibernate快取機制

快取是位於應用程式與物理資料來源之間,用於臨時存放複製資料的記憶體區域,目的是為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能.hibernate在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可...