亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深層剖析java應(yīng)用開發(fā)中MyBayis緩存

 更新時(shí)間:2021年09月15日 11:24:42   作者:DrLai  
這篇文章主要為大家深層剖析java開發(fā)中MyBayis緩存,文中講解了Mybatis緩存的分類以及使用的方式,有需要的朋友可以借鑒參考下,希望可以有所幫助

什么是 MyBatis 緩存

使⽤緩存可以減少 Java 應(yīng)⽤與數(shù)據(jù)庫(kù)的交互次數(shù),從而提升程序的運(yùn)行效率。⽐如查詢出 id = 1 的對(duì)象,第⼀次查詢出之后會(huì)自動(dòng)將該對(duì)象保存到緩存中,當(dāng)下⼀次查詢時(shí),直接從緩存中取出對(duì)象即可, 無需再次訪問數(shù)據(jù)庫(kù)。

MyBatis 緩存分類

1、⼀級(jí)緩存:SqlSession 級(jí)別,默認(rèn)開啟,并且不能關(guān)閉。(默認(rèn)開啟)

操作數(shù)據(jù)庫(kù)時(shí)需要?jiǎng)?chuàng)建 SqlSession 對(duì)象,在對(duì)象中有⼀個(gè) HashMap ⽤于存儲(chǔ)緩存數(shù)據(jù),不同的 SqlSession 之間緩存數(shù)據(jù)區(qū)域是互不影響的。 ⼀級(jí)緩存的作用域是 SqlSession 范圍的,當(dāng)在同⼀個(gè) SqlSession 中執(zhí)⾏兩次相同的 SQL 語(yǔ)句事,第⼀ 次執(zhí)行完畢會(huì)將結(jié)果保存到緩存中,第⼆次查詢時(shí)直接從緩存中獲取。 需要注意的是,如果 SqlSession 執(zhí)行了 DML 操作(insert、update、delete),MyBatis 必須將緩存清空以保證數(shù)據(jù)的準(zhǔn)確性。

2、二級(jí)緩存:Mapper 級(jí)別,默認(rèn)關(guān)閉,可以開啟。

使⽤⼆級(jí)緩存時(shí),多個(gè) SqlSession 使⽤同⼀個(gè) Mapper 的 SQL 語(yǔ)句操作數(shù)據(jù)庫(kù),得到的數(shù)據(jù)會(huì)存在⼆ 級(jí)緩存區(qū),同樣是使⽤ HashMap 進(jìn)⾏數(shù)據(jù)存儲(chǔ),相⽐較于⼀級(jí)緩存,⼆級(jí)緩存的范圍更⼤,多個(gè) SqlSession 可以共⽤⼆級(jí)緩存,⼆級(jí)緩存是跨 SqlSession 的。 ⼆級(jí)緩存是多個(gè) SqlSession 共享的,其作⽤域是 Mapper 的同⼀個(gè) namespace,不同的 SqlSession 兩次執(zhí)⾏相同的 namespace 下的 SQL 語(yǔ)句,參數(shù)也相等,則第⼀次執(zhí)⾏成功之后會(huì)將數(shù)據(jù)保存到⼆級(jí) 緩存中,第⼆次可直接從⼆級(jí)緩存中取出數(shù)據(jù)。

二級(jí)緩存如何使用

1、MyBatis 自帶的二級(jí)緩存

1.1config.xml 配置開啟⼆級(jí)緩存

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

1.2Mapper.xml 中配置⼆級(jí)緩存

<cache></cache>

1.3實(shí)體類實(shí)現(xiàn)序列化接口

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

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

2.1pom.xml 添加相關(guān)依賴

<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 配置開啟⼆級(jí)緩存

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

2.4 Mapper.xml 中配置⼆級(jí)緩存

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

以上就是深層剖析java開發(fā)中MyBayis緩存的詳細(xì)內(nèi)容,更多關(guān)于Mybatis緩存剖析的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot Test 多線程報(bào)錯(cuò)的根本原因(dataSource already closed)

    SpringBoot Test 多線程報(bào)錯(cuò)的根本原因(dataSource already

    在使用Springboot test進(jìn)行相關(guān)測(cè)試的時(shí)候,發(fā)現(xiàn)開啟線程操作數(shù)據(jù)庫(kù)的時(shí)候異常,這篇文章主要介紹了SpringBoot Test 多線程報(bào)錯(cuò):dataSource already closed的根本原因及解決方法,需要的朋友可以參考下
    2022-06-06
  • java方法重寫(重點(diǎn)講),方法重載問題

    java方法重寫(重點(diǎn)講),方法重載問題

    這篇文章主要介紹了java方法重寫(重點(diǎn)講),方法重載問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java實(shí)現(xiàn)JSON字符串格式化輸出

    java實(shí)現(xiàn)JSON字符串格式化輸出

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)JSON字符串格式化輸出,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)

    Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)

    這篇文章主要介紹了Spring事務(wù)事件監(jiān)控的實(shí)現(xiàn)。本文首先會(huì)使用實(shí)例進(jìn)行講解Spring事務(wù)事件是如何使用的,然后會(huì)講解這種使用方式的實(shí)現(xiàn)原理。感興趣的小伙伴們可以參考一下
    2018-10-10
  • spring boot項(xiàng)目如何采用war在tomcat容器中運(yùn)行

    spring boot項(xiàng)目如何采用war在tomcat容器中運(yùn)行

    這篇文章主要介紹了spring boot項(xiàng)目如何采用war在tomcat容器中運(yùn)行呢,主要講述將SpringBoot打成war包并放入tomcat中運(yùn)行的方法分享,需要的朋友可以參考下
    2022-11-11
  • Spring Security認(rèn)證機(jī)制源碼層探究

    Spring Security認(rèn)證機(jī)制源碼層探究

    SpringSecurity是基于Filter實(shí)現(xiàn)認(rèn)證和授權(quán),底層通過FilterChainProxy代理去調(diào)用各種Filter(Filter鏈),F(xiàn)ilter通過調(diào)用AuthenticationManager完成認(rèn)證 ,通過調(diào)用AccessDecisionManager完成授權(quán)
    2023-03-03
  • java實(shí)現(xiàn)文件拷貝的七種方式

    java實(shí)現(xiàn)文件拷貝的七種方式

    這篇文章主要介紹了java實(shí)現(xiàn)文件拷貝的七種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • springboot集成springsecurity 使用OAUTH2做權(quán)限管理的教程

    springboot集成springsecurity 使用OAUTH2做權(quán)限管理的教程

    這篇文章主要介紹了springboot集成springsecurity 使用OAUTH2做權(quán)限管理的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • SpringMVC RESTful支持實(shí)現(xiàn)過程演示

    SpringMVC RESTful支持實(shí)現(xiàn)過程演示

    這篇文章主要介紹了SpringMVC RESTful支持實(shí)現(xiàn)過程演示,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java驗(yàn)證碼圖片生成代碼

    Java驗(yàn)證碼圖片生成代碼

    這篇文章主要為大家詳細(xì)介紹了Java驗(yàn)證碼圖片生成代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論