hibernate簡單入門教程(三)---------緩存機制


什么是session緩存?

  session的緩存:在 Session 接口的實現中包含一系列的 集合(List),這些集合用於保存本次session創建/修改/查詢出來的對象, 這些 集合(List)構成了 Session 緩存. 只要 Session 實例沒有結束生命周期, 存放在它緩存中的對象也不會結束生命周期

 

  一級緩存是默認開啟的Session每次查詢數據時,都會從一級緩存中取數,若存在則直接返回數據,如果緩存中沒取到數據,則查詢數據庫,並將查詢結果放入緩存中。

  比如當你使用一個save()方法去保存一個對象的時候,這個時候只要緩存不清空,那么在后續的操作中可以不訪問數據庫通過訪問緩存進行查詢操作。

 

 

如何操作session緩存數據?

  session.flush:將緩存中狀態為未同步的對象先同步到數據庫內存中(並未保存到數據庫物理硬盤),並標注剛才完成同步的對象狀態為已同步,實際就是執行一系列sql語句,但不提交事務,(增刪查改同步到數據庫內存,但是不提交)

 

  transation.commit:先調用flush() 方法,然后提交事務. 則意味着提交事務意味着對數據庫操作永久保存下來。

   session.refresh:刷新,session和數據庫同步,執行查詢,把數據庫的最新信息顯示出來,更新本地緩存的對象狀態.(使用查詢語句刷新內存,讓內存信息與數據庫保持一致性)。

  session.evict(obj):將參數中的對象在session緩存中清除。

  session.clear:清空緩存,等價於list.removeAll();

 

  session.close:清空Session的緩存,關閉session資源。

 

 

什么是快照?

 

  當session加載了對象后,會在session中創建一個該對象的副本,副本的屬性值與數據庫中的值相同,該副本也成為快照。當session清理緩存時,通過比較對象的當前屬性和快照的屬性值,來判斷對象的哪些屬性發生了變化。

 

    * 發生變化的執行sql語句

 

  * 沒有發生變化不再執行語句

 

(在執行內存語句之前先取得數據庫信息確定是否需要執行增刪改語句)

快照機制有效的減少了數據庫操作。

 

什么是hibernate狀態?

Hibernate 把對象分為 4 種狀態:

臨時狀態:剛new出來的java對象,這個時候還沒與hibernate產生關聯。下一步通過save()進入持久化狀態.

持久化狀態:已經存在session中只等同步就會更新到數據庫中。

游離狀態:已經被清理出session,這個時候可以通過引用保存,跟臨時狀態差不多,但是可以用過lock()方法回到持久化狀態

刪除狀態:執行了delete方法后的刪除狀態。無法回到持久化狀態

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM