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

MyBatis之一級緩存和二級緩存問題

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

MyBatis緩存介紹

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

MyBatis 的緩存分為一級緩存和二級緩存兩種類型。

緩存分類

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

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

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

1.作用范圍

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

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

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

3.共享機(jī)制

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

4.緩存規(guī)則

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

MyBatis緩存原理

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

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

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

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

使用緩存

1.一級緩存的使用

在同一個(gè) SqlSession 中,同樣的 SQL 查詢只會執(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.二級緩存的使用

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

下面是示例代碼:

  • <cache/>

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

緩存的使用場景

緩存的使用場景主要包括以下兩種情況:

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java Web過濾器的核心原理、實(shí)現(xiàn)與執(zhí)行順序配置方法(最新整理)

    Java Web過濾器的核心原理、實(shí)現(xiàn)與執(zhí)行順序配置方法(最新整理)

    本文介紹了JavaWeb過濾器的核心概念、實(shí)現(xiàn)方式及執(zhí)行順序,過濾器允許在請求到達(dá)Servlet之前或響應(yīng)返回客戶端之前對請求和響應(yīng)進(jìn)行處理,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java中@Autowired注解用法及說明

    Java中@Autowired注解用法及說明

    @Autowired是Spring框架中的一個(gè)核心注解,用于實(shí)現(xiàn)依賴注入,它允許Spring容器自動裝配依賴,從而解耦代碼、提高可測試性和可維護(hù)性,該注解可以用于字段、構(gòu)造器和Setter方法上,并且可以結(jié)合@Qualifier注解解決依賴沖突,理解@Autowired`的使用對于掌握Spring開發(fā)至關(guān)重要
    2025-11-11
  • SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用

    SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用

    這篇文章主要介紹了SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用,異步調(diào)用是相對于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步步執(zhí)行,每一步必須等到上一步執(zhí)行完后才能執(zhí)行,異步調(diào)用則無需等待,程序執(zhí)行完即可執(zhí)行,可以減少程序執(zhí)行時(shí)間,需要的朋友可以參考下
    2023-10-10
  • Java中如何模擬HTTP請求并驗(yàn)證功能

    Java中如何模擬HTTP請求并驗(yàn)證功能

    要模擬HTTP請求并驗(yàn)證功能,你可以使用Spring Boot提供的MockMvc工具,它允許我們在沒有實(shí)際啟動HTTP服務(wù)器的情況下測試Spring MVC控制器,下面給大家分享如何模擬HTTP請求并驗(yàn)證功能,感興趣的朋友一起看看吧
    2024-05-05
  • java讀取json文件的2種方式例子

    java讀取json文件的2種方式例子

    這篇文章主要給大家介紹了關(guān)于java讀取json文件的2種方式,在開發(fā)過程中有時(shí)會遇到需要讀取.json文件的需求,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java 中的語法糖,真甜

    Java 中的語法糖,真甜

    語法糖(Syntactic sugar),也叫做糖衣語法,是英國科學(xué)家發(fā)明的一個(gè)術(shù)語,通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會.這篇文章主要介紹了Java 中的語法糖知識,需要的朋友可以參考下
    2020-12-12
  • Java中ArrayList同步的2種方法分享

    Java中ArrayList同步的2種方法分享

    這篇文章主要分享了Java中ArrayList同步的2種方法,Collections.synchronizedList()的方法,這個(gè)方法要進(jìn)行串行訪問以及使用CopyOnWriteArrayList,下面分享內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • java獲取當(dāng)前時(shí)間的四種方法代碼實(shí)例

    java獲取當(dāng)前時(shí)間的四種方法代碼實(shí)例

    這篇文章主要介紹了java獲取當(dāng)前時(shí)間的四種方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java?Swing實(shí)現(xiàn)QQ登錄頁面

    Java?Swing實(shí)現(xiàn)QQ登錄頁面

    這篇文章主要為大家詳細(xì)介紹了Java?Swing實(shí)現(xiàn)QQ登錄頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java解析使用JSON的多種方法

    Java解析使用JSON的多種方法

    使用JSON作為數(shù)據(jù)傳輸,在瀏覽器端非常方便。JSON去除了所有JavaScript執(zhí)行代碼,只保留對象格式,而且JSON天生適合JavaScript處理,所以,絕大多數(shù)REST?API都選擇JSON作為數(shù)據(jù)傳輸格式?,F(xiàn)在問題來了:使用Java如何對JSON進(jìn)行讀寫?
    2022-12-12

最新評論

扶风县| 吉木萨尔县| 湟源县| 稷山县| 通化县| 乐陵市| 年辖:市辖区| 鄂伦春自治旗| 沂南县| 紫云| 永宁县| 台江县| 江门市| 新源县| 什邡市| 夏津县| 太和县| 古丈县| 光泽县| 日土县| 宜兰县| 怀集县| 屏山县| 巴青县| 贺州市| 兴义市| 德庆县| 大悟县| 宁海县| 江阴市| 通山县| 双牌县| 枣强县| 泾源县| 溧阳市| 墨脱县| 平安县| 张家港市| 邯郸县| 苏尼特左旗| 包头市|