欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis之一級(jí)緩存和二級(jí)緩存問(wèn)題

 更新時(shí)間:2024年01月30日 10:05:48   作者:源末coco  
這篇文章主要介紹了MyBatis之一級(jí)緩存和二級(jí)緩存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MyBatis緩存介紹

MyBatis 是一款優(yōu)秀的持久層框架,它提供了緩存功能來(lái)減少數(shù)據(jù)查詢時(shí)的數(shù)據(jù)庫(kù)交互次數(shù),從而提高查詢性能。

MyBatis 的緩存分為一級(jí)緩存和二級(jí)緩存兩種類型。

緩存分類

  • 根據(jù)緩存存放位置,緩存可以分為本地緩存和分布式緩存。
  • 根據(jù)緩存作用范圍,緩存可以分為永久緩存和臨時(shí)緩存。

在 MyBatis 中,根據(jù)作用范圍,分別有一級(jí)緩存和二級(jí)緩存兩種類型。

一級(jí)緩存與二級(jí)緩存的區(qū)別

1.作用范圍

  • 一級(jí)緩存的作用范圍是 SqlSession 的生命周期
  • 二級(jí)緩存的作用范圍是整個(gè)應(yīng)用程序的生命周期

2.實(shí)現(xiàn)方式

  • 一級(jí)緩存是通過(guò) SqlSession 內(nèi)置的一個(gè) HashMap 來(lái)實(shí)現(xiàn)的
  • 而二級(jí)緩存則是通過(guò)配置 Cache 接口來(lái)實(shí)現(xiàn)的

3.共享機(jī)制

  • 一級(jí)緩存只能在同一個(gè) SqlSession 內(nèi)部共享
  • 二級(jí)緩存可以在多個(gè) SqlSession 之間共享

4.緩存規(guī)則

  • 一級(jí)緩存默認(rèn)開(kāi)啟并且無(wú)法關(guān)閉;
  • 二級(jí)緩存需要手動(dòng)開(kāi)啟并進(jìn)行配置

MyBatis緩存原理

MyBatis 的緩存本質(zhì)上是一個(gè) HashMap,它的鍵是查詢語(yǔ)句和參數(shù)的組合,值是查詢結(jié)果。

當(dāng)我們執(zhí)行一個(gè)查詢時(shí),MyBatis 會(huì)先從緩存中查找對(duì)應(yīng)的查詢結(jié)果,如果緩存中存在,則直接返回緩存的結(jié)果;如果緩存中不存在,則從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),并將查詢結(jié)果存入緩存中。

每個(gè) SqlSession 都有自己的緩存,因此在不同的 SqlSession 中執(zhí)行同一個(gè)查詢語(yǔ)句,它們所使用的緩存是不同的。

同時(shí),MyBatis 的緩存是基于引用計(jì)數(shù)的機(jī)制實(shí)現(xiàn)的,當(dāng)查詢語(yǔ)句被多次引用時(shí),緩存的引用計(jì)數(shù)會(huì)加 1,只有當(dāng)引用計(jì)數(shù)為 0 時(shí),緩存才會(huì)被真正的清除。

使用緩存

1.一級(jí)緩存的使用

在同一個(gè) SqlSession 中,同樣的 SQL 查詢只會(huì)執(zhí)行一次,并把查詢結(jié)果緩存到 SqlSession 內(nèi)置的 HashMap 中。

下面是示例代碼:

SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user1 = userMapper.selectUserById(1);
User user2 = userMapper.selectUserById(1);
System.out.println(user1 == user2); // true
sqlSession.close();

2.二級(jí)緩存的使用

需要在 XML 映射文件中添加 <cache> 標(biāo)簽來(lái)開(kāi)啟二級(jí)緩存,并指定緩存實(shí)現(xiàn)類。

下面是示例代碼:

  • <cache/>

需要注意的是,如果要使用二級(jí)緩存,需要讓你的實(shí)體類實(shí)現(xiàn) Serializable 接口。

緩存的使用場(chǎng)景

緩存的使用場(chǎng)景主要包括以下兩種情況:

1.某些數(shù)據(jù)被經(jīng)常訪問(wèn)

  • 如果某些數(shù)據(jù)經(jīng)常被訪問(wèn),
  • 那么將這些數(shù)據(jù)緩存起來(lái),
  • 可以減少數(shù)據(jù)庫(kù)交互次數(shù),提高系統(tǒng)性能。

2.數(shù)據(jù)存儲(chǔ)較大,查詢耗時(shí)較長(zhǎng)

  • 如果某些數(shù)據(jù)存儲(chǔ)較大,且查詢這些數(shù)據(jù)的效率比較低
  • 那么可以將查詢結(jié)果緩存下來(lái),
  • 下次需要查詢時(shí),直接從緩存中讀取。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?異步接口返回結(jié)果的四種方式

    Spring?異步接口返回結(jié)果的四種方式

    這篇文章主要介紹了Spring?異步接口返回結(jié)果的四種方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • java GUI界面初步入門示例【AWT包】

    java GUI界面初步入門示例【AWT包】

    這篇文章主要介紹了java GUI界面,結(jié)合簡(jiǎn)單實(shí)例形式分析了java使用AWT包進(jìn)行圖形界面操作相關(guān)使用技巧,需要的朋友可以參考下
    2020-01-01
  • 圖解如何在Spring Boot中使用JSP頁(yè)面

    圖解如何在Spring Boot中使用JSP頁(yè)面

    這篇文章主要介紹了圖解如何在Spring Boot中使用JSP頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • MyBatis動(dòng)態(tài)SQL中的trim標(biāo)簽的使用方法

    MyBatis動(dòng)態(tài)SQL中的trim標(biāo)簽的使用方法

    這篇文章主要介紹了MyBatis動(dòng)態(tài)SQL中的trim標(biāo)簽的使用方法,需要的朋友可以參考下
    2017-05-05
  • 一文弄懂fastjson

    一文弄懂fastjson

    fastjson?是一個(gè)java語(yǔ)言編寫(xiě)的高性能且功能完善的JSON庫(kù),本文主要介紹了fastjson的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • 解決SpringBoot打成jar運(yùn)行后無(wú)法讀取resources里的文件問(wèn)題

    解決SpringBoot打成jar運(yùn)行后無(wú)法讀取resources里的文件問(wèn)題

    這篇文章主要介紹了解決SpringBoot打成jar運(yùn)行后無(wú)法讀取resources里的文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java實(shí)現(xiàn)線性表及其算法

    java實(shí)現(xiàn)線性表及其算法

    線性表是最簡(jiǎn)單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個(gè)體數(shù)據(jù)元素(節(jié)點(diǎn))組成的有限序列,這篇文章主要介紹了java實(shí)現(xiàn)線性表及其算法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java重寫(xiě)equals及hashcode方法流程解析

    Java重寫(xiě)equals及hashcode方法流程解析

    這篇文章主要介紹了Java重寫(xiě)equals及hashcode方法流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(條件隊(duì)列)

    Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(條件隊(duì)列)

    這篇文章主要為大家詳細(xì)介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java程序員必備的11大IntelliJ插件(附地址)

    Java程序員必備的11大IntelliJ插件(附地址)

    這篇文章主要介紹了Java程序員必備的11大IntelliJ插件(附地址),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論