Hibernate一級快取

2022-09-08 06:21:13 字數 1634 閱讀 4043

什麼是快取:將資料提前存放到記憶體中的某乙個位置,當再次使用的時候,可以直接從記憶體裡獲取

快取的好處:提公升程式的執行效率,快取技術是hibernate的優化手段

hibernate分成兩個基本的快取

1,一級快取:session級別的快取,一級快取與session的生命週期一致,自帶的

2,二級快取:sessionfactory級別的快取,不是自帶的

證明快取的存在:

因為查詢的是同一條記錄   當第一次查詢出來的時候資料就被hibernate儲存到了一級快取裡

當第二次查詢時就不需要去執行sql語句到資料庫查詢了,直接獲取快取裡的

例項**:

理解一級快取

在session介面的實現中包含一系列的j**a的集合,這些j**a集合構成了session的快取

只要session例項沒有結束生命週期,存放在它快取的物件也不會結束生命週期

當session物件的s**e()方法持久化乙個物件時,該物件被載入快取,以後即使程式不呼叫該物件,只要快取不清空,該物件仍處於生命週期中

當試圖get(),load()物件時,會判斷快取中是否存在該物件,有則返回,此時不查詢資料庫,沒有再查詢資料庫

session能夠在某些時間點,按照快取中物件的變化來執行相關的sql語句,來同步更新資料庫,這一過程被稱為刷出快取(flush)

預設情況下session在以下時間點刷出快取:

當程式呼叫transaction的commit()方法時,該方法先輸出快取,然後再向資料庫提交事務

當應用程式執行一些查詢操作時,如果快取中持久化物件的屬性已經發生了變化,會先刷出快取,以保證查詢結果能夠反映持久化物件的最新狀態

呼叫session的flush()方法

持久化物件有自動更新資料庫的功能能自動更新的原因是:依賴hibernate的一級快取

hibernate向一級快取中存入資料的同時,還會複製乙份資料庫存入hibernate快照中,當呼叫commit()方法時,會清理一級快取中的資料操作

同時會檢查一級快取中的資料和快照區的資料是否相同,如果不同則會執行update()方法,將一級快取的資料同步到資料庫中,並更新快照區

反正,則不會執行update()方法

Hibernate 一級快取

1.session級別的快取,同session繫結,生命週期和session相同,當session銷毀,它也清除。管理以及快取的方法有clear evict clear清除session快取,evict將某個物件清除快取,相當於成為游離態detached。2.是實體級別的快取,只有在查詢物件級別的時...

Hibernate 一級快取

1.快取 hibernate中也存在快取.hibernate中存在的快取也是用來提高效率.2.hibernate中存在兩種快取 1 執行緒級別的快取.session快取 2 程序級別的快取.hibernate 二級快取 3.session快取 就是session物件中存在的快取.快取中存在的是 持久...

hibernate 一級快取

若 號碼中已經有這個號碼,那麼將它的擴充套件碼自動增加1,以保證每次傳送的 號碼加擴充套件碼組成唯一號碼 public synchronized void updateextcode string phonenumber throws exception 專案中一段邏輯是 1 通過 手機號 字段找到...