偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

MyBaits 中包含兩級本地緩存:

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

一級緩存 VS 二級緩存

一級緩存和二級緩存的主要區(qū)別如下:

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

開啟二級緩存

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

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

完整示例實現(xiàn)如下:

<?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);
    }
}

執(zhí)行以上單元測試的執(zhí)行結果如下:

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

小結

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

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

2025-03-10 07:05:07

2023-02-18 13:34:14

Nacos健康檢查機制

2021-07-28 10:08:19

類加載代碼塊面試

2023-02-08 08:32:41

輪詢鎖

2022-06-06 15:33:20

線程Java釋放鎖

2022-06-07 12:03:33

Java內存模型

2021-11-08 15:59:01

MyBatis關聯(lián)開發(fā)

2023-12-29 13:45:00

2024-01-29 10:08:11

零拷貝Zero-copyCPU 拷貝

2024-02-21 16:42:00

2020-07-30 07:58:36

加密算法

2021-06-02 11:25:18

線程池Java代碼

2024-02-27 15:23:48

RedLock算法Redis

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數(shù)據(jù)庫緩存池

2021-08-28 09:06:11

Dubbo架構服務

2023-03-08 07:46:53

面試官優(yōu)化結構體
點贊
收藏

51CTO技術棧公眾號