首頁常見問題正文

Hibernate的一級緩存是什么?具有哪些特點?

更新時間:2023-02-13 來源:黑馬程序員 瀏覽量:

IT培訓班

  Hibernate中的緩存分為一級緩存和二級緩存,這兩個級別的緩存都位于持久化層,并且存儲的都是數(shù)據(jù)庫數(shù)據(jù)的備份。圖1-6為Hibernate提供的兩種緩存,兩者區(qū)別如下:

  1.一級緩存:一級緩存本質上是自帶的不可卸載的,一級緩存的生命周期與session是一致的,一級緩存稱為session級別的緩存。

  2.二級緩存:默認沒有開啟,是需要手動配置才可以使用的。二級緩存的優(yōu)勢在于可以在多個session中共享數(shù)據(jù),二級緩存稱為是sessionFactory級別的緩存。

1676254355255_Hibernate提供的兩種緩存.jpg

  圖1-6 Hibernate提供的兩種緩存

  一級緩存其實就是Session緩存。Session緩存是一塊內存空間,用于存儲與管理Java對象。在使用Hibernate查詢對象時,首先會使用對象的OID值在Hibernate的一級緩存中查找,如果找到匹配的對象,則直接將該對象從一級緩存中取出使用;如果沒有找到匹配的對象,則會去數(shù)據(jù)庫中查詢對應的數(shù)據(jù)。當從數(shù)據(jù)庫中查詢到所需數(shù)據(jù)時,該數(shù)據(jù)信息會存儲到一級緩存中。由此可知,Hibernate一級緩存的作用就是減少對數(shù)據(jù)庫的訪問次數(shù)。

  Hibernate的一級緩存具有如下特點。

  ·當應用程序調用Session接口的save()、update()、saveOrUpdate時,如果Session緩存中沒有相應的對象,則Hibernate就會自動把從數(shù)據(jù)庫中查詢到的相應對象信息加入到一級緩存中。

  ·當調用Session接口的load()、get()方法,以及Query接口的list()、iterator()方法時,會判斷緩存中是否存在該對象,有則返回,不會查詢數(shù)據(jù)庫,如果緩存中沒有要查詢的對象,則再去數(shù)據(jù)庫中查詢對應對象,并添加到一級緩存中。

  ·當調用Session的close()方法時,Session緩存會被清空。

  ·Session能夠在某些情況下,按照緩存中對象的變化,執(zhí)行相關的SQL語句同步更新數(shù)據(jù)庫,這一過程被稱為刷出緩存(flush)。

  在默認情況下,Sesssion在如下幾種情況中會刷出緩存。

  (1)當應用程序調用Transaction的commit()方法時,該方法先刷出緩存(調用session.flush()方法),然后再向數(shù)據(jù)庫提交事務(調用commit()方法)。

  (2)當應用程序執(zhí)行一次查詢操作的時候,如果緩存中持久化對象的屬性已經發(fā)生了變化,會先刷出緩存,以保證查詢結果能夠反映持久化對象的最新狀態(tài)。

  (3)調用Session的flush()方法。

分享到:
在線咨詢 我要報名
和我們在線交談!