2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁常見問題正文

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

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

IT培訓班

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

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

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

1676254355255_Hibernate提供的兩種緩存.jpg

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

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

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

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

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

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

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

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

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

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

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

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