hibernate總結 快取

2021-09-23 22:46:01 字數 2262 閱讀 1550

hibernate中的快取分兩大類:一級、二級、查詢

why那麼為什麼要使用快取呢?

為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。

快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。

what

一級快取:乙個執行緒對應乙個session,乙個執行緒可以看成乙個使用者。也就是說session級快取(一級快取)只能給乙個執行緒用,別的執行緒用不了,一級快取就是和執行緒繫結了。也成為session級的快取或事務級快取,生命周期短,用來快取實體物件,不會被共享,其中load/get/iterate支援一級快取,以load方法為例:

二級快取:程序級快取或sessionfactory級快取,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別其生命週期和sessionfactory一致,二級快取可以被所有session共享

那麼什麼情況下適用二級快取呢?

1) 很少被修改的資料   

2) 不是很重要的資料,允許出現偶爾併發的資料   

3) 不會被併發訪問的資料   

4) 常量資料

查詢快取:一級快取和二級快取都只是存放實體物件的,如果查詢實體物件的普通屬性的資料,只能放到查詢快取裡,查詢快取還存放查詢實體物件的id。查詢快取的生命週期不確定,當它關聯的表發生修改,查詢快取的生命週期就結束。這裡表的修改指的是通過hibernate修改,並不是通過資料庫客戶端軟體登陸到資料庫上修改。

true

hibernate的查詢快取預設是關閉的,如果要使用就要到hibernate.cfg.xml檔案裡配置:

how

1、一級快取

evit(object obj)  將指定的持久化物件從一級快取中清除,釋放物件所占用的記憶體資源,指定物件從持久化狀態變為脫管狀態,從而成為游離物件。

clear()  將一級快取中的所有持久化物件清除,釋放其占用的記憶體資源。

contains(object obj) 判斷指定的物件是否存在於一級快取中。

flush() 重新整理一級快取區的內容,使之與資料庫資料保持同步。

應用:

public void testcache1()  catch (exception e)  finally 

}

2、二級快取

evict(class arg0, serializable arg1)

將某個類的指定id的持久化物件從二級快取中清除,釋放物件所占用的資源。

evict(class arg0)

將指定類的所有持久化物件從二級快取中清除,釋放其占用的記憶體資源。

evictcollection(string arg0)

將指定類的所有持久化物件的指定集合從二級快取中清除,釋放其占用的記憶體資源。

org.hibernate.cache.ehcacheprovider

true

<?xml version="1.0" encoding="utf-8"?>

<?xml version="1.0" encoding='utf-8'?>

存在一對多的關係,想要在在獲取一方的時候將關聯的多方快取起來,需要在集合屬性下新增子標籤,這裡需要將關聯的物件的hbm檔案中必須在存在標籤下也新增標籤,不然hibernate只會快取oid。

Hibernate快取機制的總結

快取 快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。快取的介質一般是記憶體,所以讀寫速度很快。但如果快取中...

hibernate快取,mybatis快取詳解

hibernate的快取有一級快取,二級快取,查詢快取。一級快取 很簡單,session級別的快取,通過get,update可以將物件放到一級快取中。二級快取 sessionfactory級別的快取,通過get,list可以將物件放到二級快取中,這裡我必須細講一下,list雖然能夠把物件放入二級快取...

hibernate快取機制

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