深層剖析java應用開發中MyBayis緩存

什麼是 MyBatis 緩存

使⽤緩存可以減少 Java 應⽤與數據庫的交互次數,從而提升程序的運行效率。⽐如查詢出 id = 1 的對象,第⼀次查詢出之後會自動將該對象保存到緩存中,當下⼀次查詢時,直接從緩存中取出對象即可, 無需再次訪問數據庫。

MyBatis 緩存分類

1、⼀級緩存:SqlSession 級別,默認開啟,並且不能關閉。(默認開啟)

操作數據庫時需要創建 SqlSession 對象,在對象中有⼀個 HashMap ⽤於存儲緩存數據,不同的 SqlSession 之間緩存數據區域是互不影響的。 ⼀級緩存的作用域是 SqlSession 范圍的,當在同⼀個 SqlSession 中執⾏兩次相同的 SQL 語句事,第⼀ 次執行完畢會將結果保存到緩存中,第⼆次查詢時直接從緩存中獲取。 需要註意的是,如果 SqlSession 執行瞭 DML 操作(insert、update、delete),MyBatis 必須將緩存清空以保證數據的準確性。

2、二級緩存:Mapper 級別,默認關閉,可以開啟。

使⽤⼆級緩存時,多個 SqlSession 使⽤同⼀個 Mapper 的 SQL 語句操作數據庫,得到的數據會存在⼆ 級緩存區,同樣是使⽤ HashMap 進⾏數據存儲,相⽐較於⼀級緩存,⼆級緩存的范圍更⼤,多個 SqlSession 可以共⽤⼆級緩存,⼆級緩存是跨 SqlSession 的。 ⼆級緩存是多個 SqlSession 共享的,其作⽤域是 Mapper 的同⼀個 namespace,不同的 SqlSession 兩次執⾏相同的 namespace 下的 SQL 語句,參數也相等,則第⼀次執⾏成功之後會將數據保存到⼆級 緩存中,第⼆次可直接從⼆級緩存中取出數據。

二級緩存如何使用

1、MyBatis 自帶的二級緩存

1.1config.xml 配置開啟⼆級緩存

settings>
 <!-- 打印SQL-->
 <setting name="logImpl" value="STDOUT_LOGGING" />
 <!-- 開啟延遲加載 -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 開啟⼆級緩存 -->
 <setting name="cacheEnabled" value="true"/>
</settings>

1.2Mapper.xml 中配置⼆級緩存

<cache></cache>

1.3實體類實現序列化接口

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account implements Serializable {
 private long id;
 private String username;
 private String password;
 private int age;
}

2、ehcache 二級緩存(第三方)

2.1pom.xml 添加相關依賴

<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-ehcache</artifactId>
 <version>1.0.0</version>
</dependency>
<dependency>
 <groupId>net.sf.ehcache</groupId>
 <artifactId>ehcache-core</artifactId>
 <version>2.4.3</version>
</dependency>

2.2添加 ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 <diskStore/>
 <defaultCache
 maxElementsInMemory="1000"
 maxElementsOnDisk="10000000"
 eternal="false"
 overflowToDisk="false"
 timeToIdleSeconds="120"
 timeToLiveSeconds="120"
 diskExpiryThreadIntervalSeconds="120"
 memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>

2.3config.xml 配置開啟⼆級緩存

<settings>
 <!-- 打印SQL-->
 <setting name="logImpl" value="STDOUT_LOGGING" />
 <!-- 開啟延遲加載 -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 開啟⼆級緩存 -->
 <setting name="cacheEnabled" value="true"/>
</settings>

2.4 Mapper.xml 中配置⼆級緩存

<cache type="org.mybatis.caches.ehcache.EhcacheCache">
 <!-- 緩存創建之後,最後⼀次訪問緩存的時間⾄緩存失效的時間間隔 -->
 <property name="timeToIdleSeconds" value="3600"/>
 <!-- 緩存⾃創建時間起⾄失效的時間間隔 -->
 <property name="timeToLiveSeconds" value="3600"/>
 <!-- 緩存回收策略,LRU表示移除近期使⽤最少的對象 -->
 <property name="memoryStoreEvictionPolicy" value="LRU"/>
</cache>

以上就是深層剖析java開發中MyBayis緩存的詳細內容,更多關於Mybatis緩存剖析的資料請關註WalkonNet其它相關文章!

推薦閱讀: