最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis緩存機(jī)制詳解與實(shí)例分析

 更新時(shí)間:2023年11月24日 11:54:45   作者:小威要向諸佬學(xué)習(xí)呀  
Mybatis的緩存分為一級(jí)緩存和二級(jí)緩存,一級(jí)緩存是SqlSession級(jí)別的而二級(jí)緩存是mapper級(jí)別的,本文詳細(xì)的介紹了Mybatis緩存機(jī)制與實(shí)例分析,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下

Mybatis緩存概述

Mybatis的緩存分為一級(jí)緩存和二級(jí)緩存。一級(jí)緩存是SqlSession級(jí)別的,主要用于減少同一個(gè)SqlSession中相同的查詢語(yǔ)句執(zhí)行的次數(shù);而二級(jí)緩存是mapper級(jí)別的,多個(gè)SqlSession可以共享一個(gè)UserMapper的二級(jí)緩存。

一級(jí)緩存

首先先詳細(xì)介紹一下一級(jí)緩存。

一級(jí)緩存是默認(rèn)開啟的,不需要我們開發(fā)者特別配置。當(dāng)使用SqlSession進(jìn)行查詢時(shí),如果下一次再使用相同的SqlSession進(jìn)行查詢,就會(huì)直接從緩存中取數(shù)據(jù),如果沒有才從數(shù)據(jù)庫(kù)中取數(shù)據(jù)。

那么一級(jí)緩存是如何失效的呢?

當(dāng)執(zhí)行增刪改操作(insert、update、delete)時(shí),會(huì)清空一級(jí)緩存,因?yàn)樵鰟h改操作可能會(huì)改變數(shù)據(jù)庫(kù)中的數(shù)據(jù),為了保證數(shù)據(jù)的一致性,需要清空緩存

二級(jí)緩存

接著我們學(xué)習(xí)一下二級(jí)緩存。

二級(jí)緩存需要我們手動(dòng)開啟和配置。在mapper.xml文件中添加標(biāo)簽,就可以開啟二級(jí)緩存。對(duì)于使用注解的mapper,我們?cè)诮涌谏鲜褂聾CacheNamespace注解也可以啟用二級(jí)緩存。

那么二級(jí)緩存共享可以共享嗎?

二級(jí)緩存是mapper級(jí)別的,多個(gè)SqlSession是可以共享同一個(gè)mapper的二級(jí)緩存。這樣可以減少跨SqlSession中相同的查詢語(yǔ)句執(zhí)行的次數(shù),進(jìn)一步提高性能。

緩存實(shí)例分析

接下來(lái)我們通過(guò)一個(gè)之前課設(shè)的例子來(lái)深入理解Mybatis的緩存機(jī)制。

首先,我們需要?jiǎng)?chuàng)建一個(gè)實(shí)體類User,如下:

public class User {
    private int id;
    private String name;
    private String email;
    // 此處省略了getter和setter方法
}

接著,我們需要?jiǎng)?chuàng)建一個(gè)UserMapper接口,如下:

public interface UserMapper {
    List<User> selectUsers(); // 默認(rèn)返回全部用戶信息
}

然后在對(duì)應(yīng)的MyBatis配置文件中添加一個(gè)使用一級(jí)緩存的SQL語(yǔ)句:

<select id="selectUsers" resultType="com.example.demo.model.User">
    SELECT * FROM users WHERE is_delete=0
</select>

然后在Mapper接口中使用該SQL語(yǔ)句,并且在調(diào)用方法前面添加一行代碼,用來(lái)開啟一級(jí)緩存:

public class UserService {
    @Cacheable("userList") // 使用一級(jí)緩存的示例,執(zhí)行完畢后自動(dòng)清除數(shù)據(jù)到二級(jí)緩存中。若不需要將結(jié)果存儲(chǔ)到二級(jí)緩存中,可以在@Cacheable注解中添加key屬性為null即可。例如:@Cacheable(key = "userList")
    public List<User> selectUsers() {
        return userMapper.selectUsers(); // 默認(rèn)返回全部用戶信息
    }
}

我們這個(gè)例子介紹了如何使用一級(jí)緩存。二級(jí)緩存的使用相對(duì)復(fù)雜一些,需要考慮更多的問題和情況。同時(shí)也要注意一些細(xì)節(jié)問題,比如當(dāng)一個(gè)Mapper有多個(gè)SqlStatement時(shí),默認(rèn)只有一個(gè)被應(yīng)用到二級(jí)緩存中,如果有多個(gè)需要執(zhí)行相同Sql語(yǔ)句的情況(比如對(duì)多個(gè)不同的結(jié)果集進(jìn)行合并),需要手動(dòng)配置多個(gè)不同的SqlStatement對(duì)應(yīng)不同的二級(jí)緩存名稱。

同時(shí)我們也要注意數(shù)據(jù)一致性問題,避免在多個(gè)SqlSession之間產(chǎn)生沖突。

注意事項(xiàng)

除了上面所說(shuō)的之外,還需要注意這些問題:

  • 臟讀問題:由于緩存的存在,可能會(huì)導(dǎo)致臟讀問題。即當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)已經(jīng)改變,但緩存中的數(shù)據(jù)還未更新時(shí),讀取到的將是舊的數(shù)據(jù)。因此,在使用緩存時(shí),需要注意數(shù)據(jù)的實(shí)時(shí)性和一致性。
  • 緩存策略選擇:一級(jí)緩存和二級(jí)緩存各有優(yōu)缺點(diǎn),需要根據(jù)我們的實(shí)際應(yīng)用場(chǎng)景和需求進(jìn)行選擇。對(duì)于讀多寫少的應(yīng)用,可以更多地使用二級(jí)緩存;對(duì)于讀寫都比較頻繁的應(yīng)用,可能需要慎用緩存,避免數(shù)據(jù)的不一致性。

到此這篇關(guān)于Mybatis緩存機(jī)制詳解與實(shí)例分析的文章就介紹到這了,更多相關(guān)Mybatis緩存機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Cron表達(dá)式的生成解析及計(jì)算的工具類完整代碼

    Java中Cron表達(dá)式的生成解析及計(jì)算的工具類完整代碼

    這篇文章主要給大家介紹了關(guān)于Java中Cron表達(dá)式的生成解析及計(jì)算工具類的相關(guān)資料,Cron表達(dá)式是一個(gè)字符串,字符串空格分割,每一個(gè)域代表一個(gè)含義,一個(gè)cron表達(dá)式有至少6個(gè),需要的朋友可以參考下
    2023-12-12
  • 在Java項(xiàng)目中實(shí)現(xiàn)日志輸出的技巧分享

    在Java項(xiàng)目中實(shí)現(xiàn)日志輸出的技巧分享

    日志是開發(fā)過(guò)程中不可或缺的一部分,它可以幫助我們追蹤代碼的執(zhí)行過(guò)程、排查問題以及監(jiān)控系統(tǒng)運(yùn)行狀況,然而,大多數(shù)開發(fā)人員在編寫日志時(shí)往往只關(guān)注于輸出必要的信息,而忽略了日志的可讀性和美觀性,本文將介紹如何在Java項(xiàng)目中實(shí)現(xiàn)漂亮的日志輸出
    2023-10-10
  • java中使用Files.readLines()處理文本中行數(shù)據(jù)方式

    java中使用Files.readLines()處理文本中行數(shù)據(jù)方式

    這篇文章主要介紹了java中使用Files.readLines()處理文本中行數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中實(shí)現(xiàn)控制臺(tái)打印sql語(yǔ)句方式

    java中實(shí)現(xiàn)控制臺(tái)打印sql語(yǔ)句方式

    這篇文章主要介紹了java中實(shí)現(xiàn)控制臺(tái)打印sql語(yǔ)句方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java測(cè)試框架的方法

    java測(cè)試框架的方法

    這篇文章主要介紹了java測(cè)試框架的方法,文中代碼非常詳細(xì),供大家學(xué)習(xí)和參考,感興趣的朋友可以了解下
    2020-06-06
  • 在Docker中部署Spring Boot項(xiàng)目過(guò)程詳解

    在Docker中部署Spring Boot項(xiàng)目過(guò)程詳解

    這篇文章主要介紹了在Docker中部署Spring Boot項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Linux下用java -jar運(yùn)行可執(zhí)行jar包的方法教程

    Linux下用java -jar運(yùn)行可執(zhí)行jar包的方法教程

    這篇文章主要給大家介紹了在Linux下用java -jar運(yùn)行可執(zhí)行jar包的方法教程,文中介紹的非常詳細(xì),相信對(duì)大家的工作或者學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    這篇文章主要介紹了Spring中@PathVariable和@RequestParam注解的用法區(qū)別,@PathVariable 是 Spring 框架中的一個(gè)注解,用于將 URL 中的變量綁定到方法的參數(shù)上,它通常用于處理 RESTful 風(fēng)格的請(qǐng)求,從 URL 中提取參數(shù)值,并將其傳遞給方法進(jìn)行處理,需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)英文猜詞游戲的示例代碼

    Java實(shí)現(xiàn)英文猜詞游戲的示例代碼

    這篇文章主要介紹了如何用Java編寫一個(gè)英文猜詞游戲,可以用來(lái)背英語(yǔ)單詞。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • SpringBoot內(nèi)部外部配置文件加載順序解析

    SpringBoot內(nèi)部外部配置文件加載順序解析

    這篇文章主要介紹了SpringBoot內(nèi)部外部配置文件加載順序解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

株洲县| 台北县| 金沙县| 天气| 交城县| 新和县| 镇远县| 纳雍县| 雷山县| 延长县| 辽源市| 通渭县| 浮梁县| 鹿泉市| 梧州市| 太原市| 卓尼县| 莲花县| 贡山| 横峰县| 侯马市| 张家界市| 长海县| 化州市| 辽中县| 峡江县| 门头沟区| 福建省| 上饶县| 宜兰县| 垣曲县| 鸡东县| 鄄城县| 恩施市| 丰都县| 和政县| 疏附县| 嘉义市| 台南市| 高邑县| 乌拉特后旗|