成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說一下MyBatis緩存機制?

數據庫 其他數據庫
MyBatis 的緩存機制屬于本地緩存,適用于單機系統,它的作用是減少數據庫的查詢次數,提高系統性能。MyBatis 本地緩存有兩類:一級緩存 SqlSession 級別,默認開啟不能關閉,二級緩存 Mapper 級別,默認關閉,可以通過在 XML 中添加標簽開啟。

MyBatis 的緩存機制屬于本地緩存,適用于單機系統,它的作用是減少數據庫的查詢次數,提高系統性能。

MyBaits 中包含兩級本地緩存:

  • 一級緩存:SqlSession 級別的,是 MyBatis 自帶的緩存功能,默認開啟,并且無法關閉,因此當有兩個 SqlSession 訪問相同的 SQL 時,一級緩存也不會生效,需要查詢兩次數據庫。
  • 二級緩存:Mapper 級別的,只要是同一個 Mapper,無論使用多少個 SqlSession 來操作,數據都是共享的,多個不同的 SqlSession 可以共用二級緩存,MyBatis 二級緩存默認是關閉的,需要使用時可手動開啟,二級緩存也可以使用第三方的緩存,比如,使用 Ehcache 作為二級緩存。

一級緩存 VS 二級緩存

一級緩存和二級緩存的主要區別如下:

  • 一級緩存是 SqlSession 級別的緩存,它的作用域是同一個 SqlSession,同一個 SqlSession 中的多次查詢會共享同一個緩存。二級緩存是 Mapper 級別的緩存,它的作用域是同一個 Mapper,同一個 Mapper 中的多次查詢會共享同一個緩存。
  • 一級緩存是默認開啟的,不需要手動配置。二級緩存需要手動配置,需要在 Mapper.xml 文件中添加標簽。
  • 一級緩存的生命周期是和 SqlSession 一樣長的,當 SqlSession 關閉時,一級緩存也會被清空。二級緩存的生命周期是和 MapperFactory 一樣長的,當應用程序關閉時,二級緩存也會被清空。
  • 一級緩存只能用于同一個 SqlSession 中的多次查詢,不能用于跨 SqlSession 的查詢。二級緩存可以用于跨 SqlSession 的查詢,多個 SqlSession 可以共享同一個二級緩存。
  • 一級緩存是線程私有的,不同的 SqlSession 之間的緩存數據不會互相干擾。二級緩存是線程共享的,多個 SqlSession 可以共享同一個二級緩存,需要考慮線程安全問題。

開啟二級緩存

MyBatis 一級緩存是自帶的緩存,默認開啟,且無法關閉。而二級緩存默認是關閉的,因此我們只需要掌握二級緩存的開啟即可。二級緩存開啟需要兩步:

  1. 在 mapper xml 中添加標簽。
  2. 在需要緩存的標簽上設置 useCache="true"(最新版本中,可以省略此步驟)。

完整示例實現如下:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.demo.mapper.StudentMapper">
    <cache/>
    <select id="getStudentCount" resultType="Integer" useCache="true">
        select count(*) from student
    </select>
</mapper>

編寫單元測試代碼:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class StudentMapperTest {
    @Autowired
    private StudentMapper studentMapper;

    @Test
    void getStudentCount() {
        int count = studentMapper.getStudentCount();
        System.out.println("查詢結果:" + count);
        int count2 = studentMapper.getStudentCount();
        System.out.println("查詢結果2:" + count2);
    }
}

執行以上單元測試的執行結果如下:

從以上結果可以看出,兩次查詢雖然使用了不同的 SqlSession,但第二次查詢使用了緩存,并未查詢數據庫。

小結

MyBatis 的緩存機制屬于本地緩存,適用于單機系統,它的作用是減少數據庫的查詢次數,提高系統性能。MyBatis 本地緩存有兩類:一級緩存 SqlSession 級別,默認開啟不能關閉,二級緩存 Mapper 級別,默認關閉,可以通過在 XML 中添加標簽開啟。

責任編輯:姜華 來源: Java中文社群
相關推薦

2025-03-10 07:05:07

2023-02-18 13:34:14

Nacos健康檢查機制

2021-07-28 10:08:19

類加載代碼塊面試

2022-06-07 12:03:33

Java內存模型

2023-02-08 08:32:41

輪詢鎖

2022-06-06 15:33:20

線程Java釋放鎖

2021-11-08 15:59:01

MyBatis關聯開發

2024-02-21 16:42:00

2024-02-27 15:23:48

RedLock算法Redis

2020-07-30 07:58:36

加密算法

2021-06-02 11:25:18

線程池Java代碼

2023-12-29 13:45:00

2024-01-29 10:08:11

零拷貝Zero-copyCPU 拷貝

2023-01-30 15:39:40

GETHTTP

2021-11-27 08:13:13

Final 面試

2022-09-27 21:14:54

Spring事務傳播機制

2023-11-29 08:00:53

JavaTreeMap底層

2021-01-06 17:28:00

MySQL數據庫緩存池

2021-08-28 09:06:11

Dubbo架構服務

2023-03-08 07:46:53

面試官優化結構體
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂在线www| 成人一区二区三区 | 在线欧美视频 | 久久6| 日本黄色大片免费看 | 91中文字幕在线观看 | 国产午夜在线观看 | 色综合天天天天做夜夜夜夜做 | 久草网址| 91视频播放 | 一区在线观看 | 国产免费又色又爽又黄在线观看 | 91不卡在线 | 在线欧美一区 | 国产在线一区二 | 欧美日韩一区二区在线播放 | 国产91在线观看 | 亚洲一区二区免费电影 | 国产成人精品一区二三区在线观看 | 亚洲日韩欧美一区二区在线 | 国产精品91久久久久久 | 超碰精品在线观看 | 欧美激情久久久 | 久久不卡视频 | 在线免费毛片 | 国产成人啪免费观看软件 | 91福利影院 | 国产欧美精品一区二区 | 亚洲欧美中文日韩在线v日本 | 九色91视频 | 国产激情视频网址 | 中文成人在线 | 成人在线不卡 | 亚洲视频在线一区 | 欧美嘿咻| 最近中文字幕在线视频1 | 国产成年人视频 | 伊人伊成久久人综合网站 | 国产欧美一区二区三区久久手机版 | 国产精品视频免费观看 | 国色天香综合网 |