Mybatis一級快取、二級快取、自定義快取簡筆

完整專案下載:私信回覆A024,即可回去原始碼下載連結~

談到mybatis,大家應該並不陌生,不管大型、小型專案中,很多都會用到mybatis,其特徵無非就是操作簡單、封裝資料庫便於呼叫。記住,砸門只要專心寫SQL就行,如果SQL簡便,SQL文都不用寫咯,直接呼叫內部封裝方法~

1、一級快取

mybatis預設會有的快取,作用域在一個SqlSession生命週期內,SqlSession會被清空的條件是:

執行增、刪、改操作

手動關閉:SqlSession。close()

1.1 最簡單的已經快取,就是不用做任何快取的配置

Mybatis一級快取、二級快取、自定義快取簡筆

1.2 第一次查詢和第二次查詢中間,插入一次更新

Mybatis一級快取、二級快取、自定義快取簡筆

1.3 關閉SqlSession,然後再次查詢

Mybatis一級快取、二級快取、自定義快取簡筆

​2、二級快取

2.1 開啟二級快取

mybatis-config。xml配置檔案加入setting

People。xml檔案中(mapper檔案),加入:

2.2 測試二級快取

Mybatis一級快取、二級快取、自定義快取簡筆

2.3 二級快取,也會在增、刪、改操作後,清除快取滴

Mybatis一級快取、二級快取、自定義快取簡筆

2.4 二級快取在同一個mapper檔案中,是跨SqlSession的

Mybatis一級快取、二級快取、自定義快取簡筆

​除非在SQL中加入屬性:useCache=“false”,關閉二級快取,或者乾脆不設定二級快取

Mybatis一級快取、二級快取、自定義快取簡筆

2.5 如果關閉二級快取,如上圖所示,就會去看一級快取有木有(在SqlSession未關閉的情況下),如下圖所示,二級快取被關閉,但是有一級快取,所以2次同樣的SQL查詢,還是隻會訪問資料庫一次

Mybatis一級快取、二級快取、自定義快取簡筆

​3、自定義快取

3.1 引入jar包(砸用ehcache快取)

Mybatis一級快取、二級快取、自定義快取簡筆

3.2 加入ehcache.xml配置檔案

<!—— Mandatory Default Cache configuration。 These settings will be applied to caches created programmtically using CacheManager。add(String cacheName) ——> <!—— name:快取名稱。 maxElementsInMemory:快取最大個數。 eternal:物件是否永久有效,一但設定了,timeout將不起作用。 timeToIdleSeconds:設定物件在失效前的允許閒置時間(單位:秒)。僅當eternal=false物件不是永久有效時使用,可選屬性,預設值是0,也就是可閒置時間無窮大。 timeToLiveSeconds:設定物件在失效前允許存活時間(單位:秒)。最大時間介於建立時間和失效時間之間。僅當eternal=false物件不是永久有效時使用,預設是0。,也就是物件存活時間無窮大。 overflowToDisk:當記憶體中物件數量達到maxElementsInMemory時,Ehcache將會物件寫到磁碟中。 diskSpoolBufferSizeMB:這個引數設定DiskStore(磁碟快取)的快取區大小。預設是30MB。每個Cache都應該有自己的一個緩衝區。 maxElementsOnDisk:硬碟最大快取個數。 diskPersistent:是否快取虛擬機器重啟期資料 Whether the disk store persists between restarts of the Virtual Machine。 The default value is false。 diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒。 memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。預設策略是LRU(最近最少使用)。你可以設定為FIFO(先進先出)或是LFU(較少使用)。 clearOnFlush:記憶體數量最大時是否清除。 ——>

3.3 測試

Mybatis一級快取、二級快取、自定義快取簡筆

​4、事務隔離級別

4.1 如下圖,同一個事務,在另外一個事務對資料更新前後,查出的資料是一樣的,因為系統預設的事務隔離級別為:REPEATABLE-READ(可重複讀)導致的現象,就是說對於同一個事務的生命週期內,讀取的資料是一致的(但是,砸門得把二級快取給禁了,因為這個快取會影響到測試,還需要在相應的statement中加入flushCache="true"屬性)。

Mybatis一級快取、二級快取、自定義快取簡筆

4.2 如果希望讀取的資料是實時的話,需要在開啟一個事務的時候,把事務的隔離級別改為:事務隔離級別改成READ-COMMITTED(讀已提交),這樣就OK了,如下圖(禁用二級快取)

Mybatis一級快取、二級快取、自定義快取簡筆

​自己學習的一些mybatis快取知識,給大家分享下,大家可以在下方評論區發表下自己的評論哦~

完整專案下載:私信回覆A024,即可回去原始碼下載連結~