初學hibernate之快取

2022-09-15 03:21:09 字數 1133 閱讀 3642

一、1、session級別快取屬於一級快取,持久化物件儲存在session一級快取中(一級快取引用持久化物件位址),只要session不關閉,一級快取就存在,快取中物件也不會被**;

session會在一些特定時間點,將快取中資料flush到資料庫中( transaction的commit()、應用程式執行一些查詢操作、呼叫session的flush方法)。

2、sessionfactory級別快取屬於二級快取

二、證明一級快取存在:在獲取customer的demo中,可以使用同乙個session獲取兩次customer,如:

customer c1=session.get(customer.class,1);//這時c1是持久化狀態,c1儲存在session中(一級快取);

system.out.println(c1.getname());

customer c2=session.get(customer.class,1);//可驗證c2獲取值時並未向資料庫傳送sql語句,而且c1值和c2值相同

system.out.println(c2.getname());

三、hibernate快照

hibernate快照可以讓持久化物件具有自動更新能力。

如在執行customer查詢操作時customer c1=session.get(customer.class,1);如果取到的c1物件name為」tom「,然後c1.setname("fox");然後提交事務並關閉session。資料庫查詢customer資料,id為1的記錄name值更改為fox。這是快照讓物件有了自動更新能力。

hibernate向一級快取放入資料時,同事儲存快照資料(資料備份),當修改一級快取資料,在flush操作時,對比快取和快照,如果不一致自動更新(將快取資料同步到資料庫,並更新快照)

四、一級快取常見操作:

1、flush,用於重新整理一級快取,使快照區資料和快取資料一致,在沒有提交資料庫執行前,資料庫資料沒有改變

2、clear,清空一級快取中所有物件

3、evict,清空一級快取中指定物件

4、refresh,使用資料庫資料同步一級快取與快照(重新查資料庫,更新快照和一級快取)

初學Hibernate之Query擴充套件

1 hql引數化查詢,不明確值型別的用setparameter方法 明確查詢結果為一條記錄的用uniqueresult方法查詢 注意,引數化查詢中方法setstring 或 setparameter如果使用索引方式賦值,索引值從0開始,區別jdbc public void func1 2 hql分頁...

Hibernate之快取的原理

一 關於快取 其實對於快取而言,它其實就是一塊記憶體空間,在這個空間中存放了相互關聯的持久化物件,也就是存在於session 快取內的物件,那麼 session 負責根據持久化物件的狀態變化來同步的更新資料庫。session的快取是內建的不可解除安裝的,我們也稱其為一級快取,除了一級快取,sessi...

Hibernate之快取的原理

其實對於快取而言,它其實就是一塊記憶體空間,在這個空間中存放了相互關聯的持久化物件,也就是存在於session快取內的物件,那麼session負責根據持久化物件的狀態變化來同步的更新資料庫。session的快取是內建的不可解除安裝的,我們也稱其為一級快取,除了一級快取,sessionfactory有...