2023-01-12
一、Mybatis中快取機制
1、一級快取
(1)概述:一級快取(即本地快取或SqlSession級別快取)
(2)特點:
①一級快取默認開啟
②不能關閉
③可以清空
(3)快取原理
①當第一次獲取資料時,需要先從資料庫中加載資料,將資料緩沖到Mybatis一級快取中(快取底層實作原理是Map,key:hashCode+查詢的SqlId+撰寫的sql查詢陳述句+引數)
②以后再次獲取資料時,先從一級快取中獲取,如未獲取到資料,再從資料庫中獲取資料
(4)一級快取五種失效情況
①不同的SqlSession對應不同的一級快取(例如:將第一次查詢的sqlSession關閉了,之后開啟一個新的sqlSession)
②同一個sqlSession但是查詢條件不同
③同一個sqlSession兩次查詢期間執行了任何一次增刪改查操作
④同一個sqlSession兩次查詢期間手動清空了快取
⑤同一個sqlSession兩次查詢期間提交了事務
2、二級快取
(1)二級快取概述
(1)二級快取(即全域作用域快取)
(2)SqlSessionFactory級別快取
(2)二級快取的特點
①二級快取默認關閉,需要開啟時才能使用
②二級快取需要提交sqlSession或關閉sqlSession時,才會快取
(3)二級快取使用的步驟
①全域組態檔中開啟二級快取
<setting name="cacheEnabled" value="true"></setting>
②需要使用二級快取的映射檔案使用cache配置快取
③注意:POJO需要實作Serializable介面
在POJO中的類中添加“implements Serializable”
之后點擊小扳手圖示,將如下的設定進行勾選,

之后將游標放置在POJO類的后面,同時按“Alt+Enter”,在類中會添加“serialVersionUID”的設定
④關閉sqlSession或提交sqlSession時,將資料快取到二級快取
(4)二級快取中的原理
①當第一次獲取資料時,需要先從資料庫中獲取資料,將資料緩沖到Mybatis一級快取中;當提交或關閉SqlSession時,將資料快取至二級快取,
②以后再次獲取資料時,先從一級快取中獲取資料,如一級資料沒有指定資料,再去二級快取中獲取資料,如二級快取也沒有指定資料時,需要去資料庫中獲取資料,
(5)二級快取的屬性
①eviction="FIFO":快取清除“回收”策略
LRU——最近最少使用的:移除最長時間不被使用的物件
FIFO——先進先出:按物件進入快取的順序來移除它們,
②flushInterval:重繪間隔,單位毫秒
③size:參考數目,正整數
④readOnly:只讀,true/false
(6)二級快取的失效情況
在兩次查詢之間,執行增刪改操作,會同時清空一級快取和二級快取
SqlSession.clearCache():只是用來清除一級快取,
3、第三方快取
EhCache:是一個純java的行程內快取框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider
(1)使用步驟
①匯入jar包
在pom.xml中的<dependencies>中添加jar包
<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.2</version> <scope>test</scope> </dependency>
②撰寫核心組態檔
<?xml version="1.0" encoding="UTF-8" ?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <!--diskStore: 持久化到磁盤上時的存盤位置--> <diskStore path="E:\mybatis\ehcache"/> <defaultCache maxElementsInMemory="512" maxElementsOnDisk="10000000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> </defaultCache> </ehcache>
③加載第三方快取(映射檔案)
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
④開始使用
注意:
第三方快取,需要建立在二級快取基礎上(即需要開啟二級快取)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541805.html
標籤:Java
上一篇:Spring Boot通過Actuator顯示git和build的資訊
下一篇:這些是最熱門的機器學習方法!
