Mybatis MyBatis框架的緩存 一級緩存

1. 緩存的概念

  1. 緩存的概念

    1. 在內存中臨時存儲數據,速度快,可以減少數據庫的訪問次數。
    2. 經常需要查詢,不經常修改的數據,不是特別重要的數據都適合于存儲到緩存中。

2.Mybatis緩存

  • mybatis包含了一個非常強大的查詢緩存特性,他可以非常方便的定制和配置緩存。緩存可以極大的提高查詢的效率
  • mybatis系統當中默認定義了兩級緩存:一級緩存和二級緩存
    • 默認情況之下,只有一級緩存開啟(sqlSession級別的緩存)
    • 二級緩存需要手動開啟配置,需要局域namespace級別的緩存。

1.一級緩存(也叫本地緩存)

  1. MyBatis的一級緩存也是SqlSession的緩存。

  2. SqlSession對象中維護了一個Map集合,用于存儲相互的緩存數據。

  3. 查詢的時候,先從SqlSession的緩存中查找,如果有,直接返回。如果沒有,查詢數據庫。

  4. 證明一級緩存的存在,通過用戶id查詢2次,查看結果。

    public class UserTest {private InputStream in = null;private SqlSession session = null;private UserDao mapper = null;/*** 測試查詢所有的方法*/@Testpublic void findById() throws IOException {//加載主配置文件,目的是為了構建SqlSessionFactory對象in = Resources.getResourceAsStream("SqlMapConfig.xml");//創建SqlSessionFactory對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//通過SqlSessionFactory工廠對象創建SqlSesssion對象session = factory.openSession();//通過Session創建UserDao接口代理對象mapper = session.getMapper(UserDao.class);User user1 = mapper.findById(1);System.out.println(user1.toString());System.out.println("-----------------");User user2 = mapper.findById(1);System.out.println(user2.toString());System.out.println(user1 == user2);//釋放資源session.close();in.close();}
    }

    緩存失效的情況:

  • sqlSession不同
  • sqlSession相同,查詢條件不同
  • sqlSession相同,兩次查詢之間執行了增刪改操作
  • sqlSession相同,手動清除一級緩存

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895907.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895907.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux csplit 命令實現日志文件的拆分

目錄 一. 項目背景二. 通過 csplit 命令按照行數進行切割2.1 步驟分解驗證2.2 直接拆分 三. 文件合并后與原文件進行diff3.1 通過 sed 命令進行合并3.2 通過 cat 命令進行合并 一. 項目背景 ?需要的問題 項目中需要獲取某個war產生的log文件,由于是商用環境的log…

【EndNote】WPS 導入EndNote 21

寫在前面:有沒有人有激活碼,跪求! EndNote,在文獻管理和文獻引用方面很好用。寫文章的時候,使用EndNote引入需要的文獻會很方便。我目前用的WPS,想把EndNote的CWYW(Cite While You Write&#…

嵌入式0xDEADBEEF

在嵌入式系統中,0xDEADBEEF 是一個常見的“魔數”(magic number),通常用于調試和內存管理。它的含義和用途如下: 1. 調試用途 未初始化內存的標記:在調試時,0xDEADBEEF 常用于標記未初始化或已…

RT-Thread+STM32L475VET6實現紅外遙控實驗

文章目錄 前言一、板載資源介紹二、具體步驟1. 確定紅外接收頭引腳編號2. 下載infrared軟件包3. 配置infrared軟件包4. 打開STM32CubeMX進行相關配置4.1 使用外部高速時鐘,并修改時鐘樹4.2 打開定時器16(定時器根據自己需求調整)4.3 打開串口4.4 生成工程 5. 打開HW…

【HarmonyOS Next】鴻蒙應用進程和線程詳解

【HarmonyOS Next】鴻蒙應用進程和線程詳解 一、前言 進程的定義: 進程是系統進行資源分配的基本單位,是操作系統結構的基礎。 在鴻蒙系統中,一個應用下會有三類進程: (1) 主進程, (2) ExtensionAbility進程&#xff…

迪威模型網:免費暢享 3D 打印盛宴,科技魅力與趣味創意并存

還在為尋找優質3D打印模型而發愁?快來迪威模型網(https://www.3dwhere.com/),一個集前沿科技與無限趣味于一體的免費3D打印寶藏平臺! 踏入迪威模型網,仿佛開啟一場未來科技之旅。其“3D打印”專區&#xff…

力扣LeetCode: 1287 有序數組中出現次數超過25%的元素

題目: 給你一個非遞減的 有序 整數數組,已知這個數組中恰好有一個整數,它的出現次數超過數組元素總數的 25%。 請你找到并返回這個整數 示例: 輸入:arr [1,2,2,6,6,6,6,7,10] 輸出:6提示: …

一文看常見的消息隊列對比

一、核心特性對比表 維度KafkaRabbitMQRocketMQPulsar架構設計分布式日志系統,依賴ZooKeeper基于AMQP協議的代理模型主從架構NameServer協調分層架構(BrokerBookKeeper)單機吞吐量100萬 TPS5萬 TPS50萬 TPS150萬 TPS消息延遲毫秒級&#xff…

Ubuntu USB耳機找不到設備解決

? 一. 確定硬件連接 lsusb -t 插拔USB耳機,確定是否有USB識別到 二. 查看輸出設備 sudo apt-get install pavucontrol pavucontrol 點擊想要使用的輸出設備后面的綠色選項 三. 輸出設備沒有USB耳機時調試 3.1 確認ALSA是否識別設備 列出ALSA播放設備&#…

[筆記.AI]如何判斷模型是否通過剪枝、量化、蒸餾生成?

以下摘自與DeepSeek-R1在線聯網版的對話 一、基礎判斷維度 技術類型核心特征驗證方法剪枝模型參數減少、結構稀疏化1. 檢查模型參數量是否顯著小于同類標準模型1 2. 分析權重矩陣稀疏性&#xff08;如非零參數占比<30%&#xff09;4量化權重/激活值精度降低、推理速度提升1…

Redis如何解決熱Key問題

目錄 **如何解決 Redis 的熱 Key&#xff08;Hot Key&#xff09;問題&#xff1f;****解決方案** **1. 使用多級緩存****方案** **2. 進行 Key 預分片&#xff08;Key Sharding&#xff09;****方案** **3. 使用 Redis 復制機制&#xff08;主從復制或集群&#xff09;****方案…

云計算架構學習之Ansible-playbook實戰、Ansible-流程控制、Ansible-字典循環-roles角色

一、Ansible-playbook實戰 1.Ansible-playbook安裝軟件 bash #編寫yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #檢查playbook的語法 [rootansible ansible]…

【Web前端開發精品課 HTML CSS JavaScript基礎教程】第二十四章課后題答案

文章目錄 問題1&#xff1a;問題2&#xff1a;問題3&#xff1a; 問題1&#xff1a; 在HTML中嵌入JavaScript&#xff0c;應該使用的標簽是&#xff08; &#xff09;。 選項&#xff1a; A. <style></style> B. <script></script> C. <js><…

用python進行二分法查找(python實例三十)

目錄 1.認識Python 2.環境與工具 2.1 python環境 2.2 Visual Studio Code編譯 3.代碼示例 4.運行結果 1.認識Python Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。 Python 的設計具有很強的可讀性&#xff0c;相比其他語言經常使用英文關鍵…

Qt學習(五)自定義對話框,多窗口開發---添加設計師類, MDI多窗口開發

一 對話框 實現功能&#xff1a;打開文件&#xff0c;選擇目錄&#xff0c;保存文件&#xff0c;選擇顏色&#xff0c;選擇字體&#xff0c;輸入信息&#xff0c; 消息提示框 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE na…

用 Python 實現簡易的 Web 爬蟲:從入門到實戰

一、引言 在信息爆炸的時代,網絡上蘊含著海量的數據。如果我們想要獲取特定的信息,手動從網頁上復制粘貼顯然效率極低。這時,Web 爬蟲就派上了用場。Web 爬蟲是一種自動獲取網頁內容的程序,它可以模擬人類在瀏覽器中的操作,快速地抓取網頁上的數據。本文將帶領大家使用 Py…

機器視覺檢測中,2D面陣相機和線掃相機的區別

2D面陣相機和線掃相機是工業視覺系統中常用的兩種相機類型&#xff0c;各有其特點和應用場景。 2D面陣相機 特點&#xff1a; 成像方式&#xff1a;通過二維傳感器一次性捕捉整個場景的圖像。 分辨率&#xff1a;分辨率由傳感器的像素數決定&#xff0c;常見的有百萬像素到幾千…

ECharts極簡入門

ECharts 是一個基于 JavaScript的開源可視化圖表庫&#xff0c;廣泛應用于數據可視化的場景中&#xff0c;支持多種圖表類型&#xff0c;如柱狀圖、折線圖、餅圖、散點圖、雷達圖等&#xff0c;且具有強大的自定義功能。 1. ECharts 基本使用 首先需要引入 ECharts 庫&#xf…

go設置鏡像代理

前言 在 Go 開發中&#xff0c;如果直接從官方源&#xff08;https://proxy.golang.org&#xff09;下載依賴包速度較慢&#xff0c;可以通過設置 鏡像代理 來加速依賴包的下載。以下是增加 Go 鏡像代理的詳細方法&#xff1a; 一、設置 Go 鏡像代理 1. 使用環境變量設置代理…

Linux部署DeepSeek r1 模型訓練

之前寫過一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反饋提供一篇linux下部署DeepSeek r1 模型訓練教程&#xff0c;在 Linux 環境下&#xff0c;我找了足夠的相關資料&#xff0c;花費了一些時間&#xff0c;我成功部署了 DeepSeek R1 模型訓練任務&#xff0c;結…