MyBatis入門之二級快取

2021-10-03 13:27:24 字數 1269 閱讀 9942

mybatis的二級快取是namespace級別的,不同於一級快取,二級快取是sqlsession共享的,並且預設是不開啟的,如果要開啟,需要在mybatis的配置檔案中的settings節點下,手動設定:

由於示例**與之前的部落格: mybatis入門之一級快取   基本相同,所以不貼重複的**了,不同之處就是:

(1)mybatis-config.xml開啟二級快取

你也可以直接使用,表示都使用預設值

各個屬性的意思(摘自mybatis官網):

這個更高階的配置建立了乙個 fifo 快取,每隔 60 秒重新整理,最多可以儲存結果物件或列表的 512 個引用,而且返回的物件被認為是唯讀的,因此對它們進行修改可能會在不同執行緒中的呼叫者產生衝突。

可用的清除策略有:

預設的清除策略是 lru。

flushinterval(重新整理間隔)屬性可以被設定為任意的正整數,設定的值應該是乙個以毫秒為單位的合理時間量。 預設情況是不設定,也就是沒有重新整理間隔,快取僅僅會在呼叫語句時重新整理。

size(引用數目)屬性可以被設定為任意正整數,要注意欲快取物件的大小和執行環境中可用的記憶體資源。預設值是 1024。

readonly(唯讀)屬性可以被設定為 true 或 false。唯讀的快取會給所有呼叫者返回快取物件的相同例項。 因此這些物件不能被修改。這就提供了可觀的效能提公升。而可讀寫的快取會(通過序列化)返回快取物件的拷貝。 速度上會慢一些,但是更安全,因此預設值是 false。

提示 二級快取是事務性的。這意味著,當 sqlsession 完成並提交時,或是完成並回滾,但沒有執行 flushcache=true 的 insert/delete/update 語句時,快取會獲得更新

(3)實體類user要實現序列化介面serializable

2.測試類:

public class secondlevelcache 

}

測試結果:

可以看到,第二次查詢沒有發出sql語句,並且兩個查詢使用的sqlsession是不同的,說明了二級快取是sqlsession共享的。

sqlsession.close();

Mybatis之二級快取

mybatis預設對二級快取是關閉的,一級快取預設開啟 下面就說說為什麼使用二級快取需要注意 二級快取是建立在同乙個namespace下的,如果對錶的操作查詢可能有多個namespace,那麼得到的資料就是錯誤的。根據以上,想要使用二級快取時需要想好兩個問題 1 對該錶的操作與查詢都在同乙個name...

MyBatis快取策略之二級快取

從圖中可以看出 sqlsession2去查詢使用者id為1的使用者資訊,去快取中找是否存在資料,如果存在直接從快取中取出資料。明白了mybatis中二級快取的原理後,接下來就是如何使用二級快取了。在使用之前,首先得開啟二級快取的開關。開啟了二級快取後,還需要將要快取的pojo實現serializab...

MyBatis快取之二級快取 ehcache整合

二級快取允許手動管理 首先,二級快取可以跨session,只要在乙個sessionfactory範圍之內則允許跨session,但要想使用二級快取,需要手動進行配置 在 sqlmapconfig.xml 配置檔案中新增如下配置 包括之前的配置我一併貼上來了 也就是說,在mybatis框架中,只要是關...