Java面試-框架篇-Mybatis

Java面試-框架篇-Mybatis

  • MyBatis執行流程
  • 延遲加載使用及原理
  • 一, 二級緩存
  • 來源

MyBatis執行流程

  1. 讀取MyBatis配置文件: mybatis-config.xml加載運行環境和映射文件
  2. 構造會話工廠SqlSessionFactory
  3. 會話工廠創建SqlSession對象(包含了執行SQL語句的所有方法)
  4. 操作數據庫的接口, Executor執行器, 同時負責查詢緩存的維護
  5. Executor接口的執行方法中有一個MappedStatement類型的參數, 封裝了映射信息
  6. 輸入參數映射
  7. 輸出結果映射

在這里插入圖片描述

延遲加載使用及原理

  • Mybatis是否支持延遲加載

    • 延遲加載: 需要用到數據時才進行加載, 不需要用到數據時就不加載數據
    • Mybatis支持一對一關聯對象和一對多關聯集合對象的延遲加載
    • 在Mybatis配置文件中, 可以配置是否啟用延遲加載lazyLoadingEnabled=true|false, 默認是關閉的
  • 延遲加載的底層原理

    1. 使用CGLIB創建目標對象的代理對象
    2. 當調用目標方法時, 進入攔截器invoke方法, 發現目標方法是null值, 執行sql查詢
    3. 獲取數據以后, 調用set方法設置屬性值, 再繼續查詢目標方法, 就有值了

    在這里插入圖片描述

一, 二級緩存

  • Mybatis的一級, 二級緩存
    • 一級緩存: 基于PerpetualCache的HashMap本地緩存, 其存儲作用域為SqlSession, 當SqlSession進行flush或close之后, 該Session中的所有Cache就將清空, 默認打開一級緩存
    • 二級緩存: 基于namespace和mapper的作用域起作用的, 不是依賴于SqlSession, 默認也是用PerpetualCache, HashMap存儲. 需要單獨開啟, 一個是核心配置開啟cacheEnabled, 一個是mapper映射文件添加<cache/>
    • 二級緩存注意事項
      • 二級緩存需要緩存的數據實現Serializable接口
      • 只有會話提交或者關閉以后, 一級緩存中的數據才會轉移到二級緩存中
  • Mybatis的二級緩存什么時候會清理緩存中的數據
    • 當某一個作用域(一級緩存Session/二級緩存Namespaces)的進行了新增, 修改, 刪除操作后, 默認該作用域下所有select的緩存將被clear

來源

黑馬程序員. 新版Java面試專題視頻教程

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

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

相關文章

vue腳手架的基礎搭建過程

MVVM架構 Vue框架底層設計遵循MVVM架構。 Model層&#xff08;M&#xff09;模型層&#xff08;業務邏輯層&#xff09; View層&#xff08;V&#xff09;視圖層 主管UI ViewModel層&#xff08;VM&#xff09; 將項目代碼劃分清晰的層次結構后&#xff0c;非常有利于后期代…

IP地址定位技術發展與未來趨勢

隨著互聯網的快速發展&#xff0c;人們對網絡的需求和依賴程度越來越高。在海量的網絡數據傳輸中&#xff0c;IP地址定位技術作為網絡安全與信息追蹤的重要手段&#xff0c;其精準度一直備受關注。近年來&#xff0c;隨著技術的不斷進步&#xff0c;IP地址定位的精準度得到了顯…

【wireshark】基礎學習

TOC 查詢tcp tcp 查詢tcp握手請求的代碼 tcp.flags.ack 0 確定tcp握手成功的代碼 tcp.flags.ack 1 確定tcp連接請求的代碼 tcp.flags.ack 0 and tcp.flags.syn 1 3次握手后確定發送成功的查詢 tcp.flags.fin 1 查詢某IP對外發送的數據 ip.src_host 192.168.73.134 查詢某…

485 實驗

485(一般稱作 RS485/EIA-485)隸屬于 OSI 模型物理層&#xff0c;是串行通訊的一種。電氣特性規定 為 2 線&#xff0c;半雙工&#xff0c;多點通信的類型。它的電氣特性和 RS-232 大不一樣。用纜線兩端的電壓差值 來表示傳遞信號。RS485 僅僅規定了接受端和發送端的電氣特性。它…

python趣味編程-5分鐘實現一個太空大戰游戲(含源碼、步驟講解)

飛機戰爭游戲系統項目是使用Python編程語言開發的,是一個簡單的桌面應用程序。 Python 中的飛機戰爭游戲使用pygame導入和隨機導入。 Pygame 是一組跨平臺的 Python 模塊,專為編寫視頻游戲而設計。它包括設計用于 Python 編程語言的計算機圖形和聲音庫。

以jar包形式 部署Spring Boot項目

后端部署 當你將Spring Boot項目打包成JAR文件并上傳到服務器時&#xff0c;可以考慮在服務器上創建一些目錄來存放這個JAR文件以及相關的配置文件。以下是一些常見的目錄結構建議&#xff1a; /opt/your-project-name/&#xff1a; 在/opt目錄下創建一個與你的項目名稱相關的…

【word技巧】Word制作試卷,ABCD選項如何對齊?

使用word文件制作試卷&#xff0c;如何將ABCD選項全部設置對齊&#xff1f;除了一直按空格或者Tab鍵以外&#xff0c;還有其他方法嗎&#xff1f;今天分享如何將ABCD選項對齊。 首先&#xff0c;我們打開【替換和查找】&#xff0c;在查找內容輸入空格&#xff0c;然后點擊全部…

省市區編碼sql

CREATE TABLE area (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵,code varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 編碼,name varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 名稱,parent_code varchar(64) COLLATE utf8mb4_bin DEFAULT NULL CO…

20個CSS函數-釋放設計創造力和響應能力

20個CSS函數-釋放設計創造力和響應能力 CSS是網頁設計的核心&#xff0c;使開發者和設計者能夠制作出令人嘆為觀止和反應迅速的網頁布局。CSS函數通過引入動態性和多功能性提升了我們的設計能力。在本文中&#xff0c;我們將開始講解20個CSS函數。 1.rgba()&#xff1a;定義顏…

結構體打印

打印輸出 通過注解來派生Debug trait&#xff0c;才可以通過println!進行打印。默認的占位符是{}&#xff0c;底層是按照std::fmt::Display具體實現進行格式化輸出。 {}、{:?}、{#?}是格式化的幾種形式&#xff0c;{#?}是更加易讀的JSON話格式。 方法 結構體聲明方法&…

【應用前沿】索托斯平臺:個性化推薦變身SaaS 服務

隨著互聯網技術和人工智能的迅速發展&#xff0c;面對海量的數據和資源&#xff0c;如何快速準確地為每個用戶提供其感興趣的內容&#xff0c;成為我們亟待解決的問題。個性化推薦系統正是為了解決這一問題而誕生的&#xff0c;它能夠通過對用戶行為的分析和挖掘&#xff0c;為…

[Ubuntu]RT810xE--網線已拔出--問題解決

0 環境 ubuntu 22.04.3 LTSDell Inspiron 15 5547windows/ubuntu 雙系統 1 問題說明 Dell 筆記本安裝的 Ubutun 系統&#xff0c;有線網絡無法使用&#xff0c;一直顯示 “網線已拔出”。 網上一查&#xff0c;才了解到主要原因&#xff1a;網卡驅動安裝錯誤。系統默認安裝…

5-6求1-20的階乘和

#include<stdio.h> //求階乘 int main(){int n;double sum0;//求和&#xff1a;一點一點加int t1;for (n1;n<15;n){tt*n;sumsumt;}printf("結果是&#xff1a;%22.15e \n",sum);return 0; }為啥最后是%22.15e呢&#xff1f; 因為這個求和的結果太大了 所以轉…

轉移表達式:<![CDATA[ ]]>

你是否遇到過&#xff1a;在mybatis 時我們sql是寫在xml 映射文件中&#xff0c;如果寫的sql中有一些特殊的字符的話&#xff0c;在解析xml文件的時候會被轉義&#xff0c;但我們不希望他被轉義&#xff0c;所以我們要使用<![CDATA[ ]]>來解決。 <![CDATA[ ]]> …

【譯】什么時候使用 Spring 6 JdbcClient

原文地址&#xff1a;Spring 6 JdbcClient: When and How to Use it? 一、前言 自 Spring 6.1 起&#xff0c;JdbcClient 為 JDBC 查詢和更新操作提供了統一的客戶端 API&#xff0c;從而提供了更流暢、更簡化的交互模型。本教程演示了如何在各種場景中使用 JdbcClient。 二…

【VScode】安裝配置、插件及遠程SSH連接

一、VSCode安裝 二、配置安裝插件 三、配置遠程連接SSH 四、MinGW 一、VSCode安裝 VS官網 Visual Studio Code - Code Editing. Redefined下載安裝包&#xff1a; 二、配置安裝插件 安裝中文插件 配置字體為20 配置文件–>首選項->設置->Font Size為20 設置 VSC…

【libGDX】使用Mesh繪制圓形

1 前言 使用Mesh繪制三角形 中介紹了繪制三角形的方法&#xff0c;使用Mesh繪制矩形 中介紹了繪制矩形的方法&#xff0c;本文將介紹繪制圓形的方法。 libGDX 以點、線段、三角形為圖元&#xff0c;沒有提供繪制圓形的接口。要繪制圓形邊框&#xff0c;必須通過割圓法逼近圓形&…

問題:vue2使用watch監視對象屬性,但是這個監視只執行了第一次,后面就沒反應了

錯誤版本 這個版本node.a的監視只會執行一次 data(){node:{}, }, watch:{"node.a":{handler(newVal,oldVal){console.log("node.a改變了")}}, }正確版本 這個可以正常監視node.a data(){node:{a:,}, }, watch:{"node.a":{handler(newVal,old…

macos創建xcframework及簽名

前言 Framework 可以理解為封裝了共享資源的具有層次結構的文件夾&#xff0c;共享資源可以是 nib文件、國際化字符串文件、頭文件、庫文件等等。它同時也是一個 Bundle&#xff0c;里面的內容可以通過 Bundle 相關 API 來訪問。Framework 可以是 static framework 或 dynamic…

CSS中實現元素居中的七種方法

在前端開發中&#xff0c;經常需要將元素居中顯示&#xff0c;CSS提供了多種技術方法來實現元素的居中&#xff0c;在不同場景下有不同的使用方法、不同的效果&#xff0c;需要特別記住它們的應用場景才能夠正常的居中。這篇文章就大致總結一下CSS中的居中方法。 一、元素分類…