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框架中,只要是關...