Mybatis核心問題總結

對MyBatis源碼的理解

ORM框架:CRUD操作

1。SQL解析:

映射文件、注解--》映射器解析 XMLMapperBuilder MapperAnnotationBuilder

2。SQL執行:

SqlSession 接口--》Executor --》 SimpleExecutor ReuseExecutor 【Statement--JDBC】

3。結果映射:

ResultSetHandler

4。插件機制:

Interceptor

5。緩存機制--》

工作中 二級緩存 --》Redis做緩存

談談你對MyBatis中緩存的理解

緩存的作用:

不加緩存 ?1。查詢的效率降低 ?2。增大了數據庫的壓力

一級緩存:會話級別的

二級緩存:進程級別的

1。項目中要使用緩存 ?全局配置文件中 settings 我們需要打開, 在對應的映射文件中 <cache>

2。一級緩存是默認使用的。二級緩存我們需要自己開啟:源碼中是如何設計的?

一級和二級緩存的執行的先后順序:先查二級緩存。二級緩存沒有再看一級緩存。一級緩存如果還是沒有那么走數據庫查詢

作用域:一級緩存的作用域是session級別的,命中率很低

數據同步:DML操作的時候會清空緩存的數據

現在都是分布式環境,MyBatis如何實現三級緩存?

1。我們工作用到了三級緩存。通過Redis。怎么實現呢??

三級緩存的自定義實現。重寫Cache接口的讀寫方法

一級緩存是 MyBatis 默認開啟的,它存在于 SqlSession 級別,對同一個 SqlSession 內的查詢結果進行緩存。

二級緩存是基于 namespace 級別的緩存,可以在多個 SqlSession 之間共享。它需要在配置文件中進行開啟和配置。

要實現三級緩存,你可以考慮以下幾種方法:

  1. 使用分布式緩存:可以將二級緩存的數據存儲到分布式緩存系統中,如 Redis 或 Memcached。這樣,不同的應用實例或服務器可以共享緩存數據,實現三級緩存的效果。
  2. 自定義緩存實現:你可以自己開發一個緩存組件,并將其集成到 MyBatis 中。這個緩存組件可以在應用級別或系統級別進行管理,提供更高級別的緩存功能。
  3. 結合其他緩存框架:除了 MyBatis 的緩存,還可以使用其他專門的緩存框架,如 Spring Cache 等。通過將 MyBatis 的查詢結果與這些緩存框架集成,可以實現更復雜的緩存策略和多級緩存。

談談你對日志模塊的理解

日志模塊使用到了適配器模式,對于MyBatis中的數據庫的相關操作通過代理模式實現了日志的監控

談談你對SqlSessionFactory的理解

SqlSessionFactory:工廠模式:負責SqlSession對象的管理

全局的。我們應該對SqlSessionFactory做單例處理;

完成全局配置文件和映射文件的加載解析--》Configuration對象

談談你對SqlSession的理解

SqlSession具體處理每個CRUD操作

1。生命周期:需要做數據庫操作的時候會創建。不需要操作數據庫就關閉

2。作用:完成數據庫的操作

3。線程安全:SqlSession是線程不安全的 --》 單純的MyBatis的應用。我們就不能把SqlSession作用成員變量來使用 在Spring環境中怎么處理的 ?SqlSessionTemplate

談談你對MyBatis中的Executor的源碼理解

Executor:執行器。具體執行SQL操作

Executor:Simple Reuse Batch

CachingExecutor:緩存的裝飾

MyBatis中是如何對占位符進行賦值的?

SQL解析 # $ ==> ParameterHandler

  1. 定義占位符:在 SQL 語句中使用占位符,通常以#{}的形式表示。例如:SELECT * FROM table WHERE id = #{id}
  2. 設置參數:在執行 SQL 語句之前,需要通過 MyBatis 的接口或方法設置相應的參數值。這可以通過傳遞參數對象或使用參數映射來完成。
  3. 參數綁定:MyBatis 會將設置的參數與占位符進行綁定。它會根據參數的類型和名稱,將實際的值替換到占位符的位置。
  4. 執行 SQL 語句:當執行帶有占位符的 SQL 語句時,MyBatis 會將綁定后的參數值代入 SQL 中,并執行該語句。

Spring中是如何解決MySQL的SqlSession的線程安全問題的?

  1. 使用?SqlSessionFactory:Spring 會配置一個?SqlSessionFactory,它負責創建和管理?SqlSession?對象。SqlSessionFactory?是線程安全的,可以在多個線程中共享使用。
  2. 依賴注入?SqlSession:通過 Spring 的依賴注入機制,將?SqlSession?注入到需要使用數據庫操作的類中。這樣,每個類在使用?SqlSession?時都可以獲得一個獨立的實例。
  3. 控制?SqlSession?的生命周期:Spring 可以管理?SqlSession?的創建和關閉,確保在合適的時機創建和釋放?SqlSession,避免資源泄漏。
  4. 線程隔離:每個使用?SqlSession?的線程都會獲得自己獨立的?SqlSession?實例,從而避免了線程之間的競爭和數據不一致性問題。

通過以上方式,Spring 能夠有效地管理?SqlSession?的線程安全問題,使得在多線程環境下使用 MyBatis 進行數據庫操作更加可靠和安全。

你對MyBatis中的Configuration的源碼的理解

  1. 配置信息存儲Configuration?類中包含了眾多屬性,用于存儲各種配置項,如數據庫連接信息、映射文件路徑、插件配置等。這些配置信息通常通過 XML 配置文件或 Java 代碼進行設置。
  2. 映射解析Configuration?負責解析映射文件(如 XML 格式的 mapper 文件),將其中的 SQL 語句、結果映射等信息加載到內存中,以便后續執行。
  3. 對象工廠和類型別名:它管理對象工廠,用于創建 MyBatis 中的各種對象,如?SqlSession。此外,還定義了類型別名,方便在配置中使用簡潔的名稱來引用 Java 類型。
  4. 插件管理Configuration?支持插件機制,允許開發者注冊自定義插件來擴展 MyBatis 的功能。插件可以在執行過程中的特定點進行攔截和處理。
  5. 環境配置:包含了對數據庫環境的配置,如數據源、事務管理器等。可以根據不同的環境設置不同的配置。
  6. 緩存管理:管理 MyBatis 的緩存機制,包括一級緩存和二級緩存的配置。
  7. SQL 語句構建和執行:根據配置信息和映射文件,構建 SQL 語句,并通過執行器執行這些語句,返回結果。

Configuration:全局配置。映射文件解析的內容都保存在Configuration中


談談MyBatis中的插件原理

&emsp;1。插件的作用: 分頁 ?SQL檢查

2。插件的原理

  1. 攔截器接口:MyBatis 定義了一些攔截器接口,例如?Interceptor?接口。插件需要實現這些接口,以便在特定的執行點進行攔截。
  2. 插件注冊:在 MyBatis 的配置文件中,可以注冊插件。通過配置插件的相關信息,告訴 MyBatis 在哪些執行點應用插件。
  3. 執行點攔截:當 MyBatis 執行特定的操作時,如執行 SQL 語句、參數設置、結果映射等,會觸發相應的攔截器。插件可以在這些執行點之前或之后執行自定義的邏輯。
  4. 上下文傳遞:MyBatis 會將執行上下文傳遞給插件,插件可以通過這個上下文獲取相關的信息,如 SQL 語句、參數、結果等,并根據需要進行處理。
  5. 修改執行行為:插件可以根據自己的邏輯修改執行行為。例如,可以修改 SQL 語句、添加額外的參數、處理結果集等。
  6. 返回結果:插件執行完自定義邏輯后,可以選擇返回修改后的結果,或者將控制權交回給 MyBatis 繼續執行。

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

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

相關文章

Go語言---Json

JSON (JavaScript Object Notation)是一種比XML 更輕量級的數據交換格式&#xff0c;在易于人們閱讀和編寫的同時&#xff0c;也易于程序解析和生成。盡管JSON是 JavaScript的一個子集&#xff0c;但 JSON采用完全獨立于編程語言的文本格式&#xff0c;且表現為鍵/值對集合的文…

【大模型LLM面試合集】大語言模型架構_layer_normalization

2.layer_normalization 1.Normalization 1.1 Batch Norm 為什么要進行BN呢&#xff1f; 在深度神經網絡訓練的過程中&#xff0c;通常以輸入網絡的每一個mini-batch進行訓練&#xff0c;這樣每個batch具有不同的分布&#xff0c;使模型訓練起來特別困難。Internal Covariat…

【C++高階】高效數據存儲:理解并模擬實現紅黑樹Map與Set

&#x1f4dd;個人主頁&#x1f339;&#xff1a;Eternity._ ?收錄專欄?&#xff1a;C “ 登神長階 ” &#x1f921;往期回顧&#x1f921;&#xff1a;了解 紅黑樹 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; ?模擬實現Map與Set &#x1f4d2;1.…

js ES6 part1

聽了介紹感覺就是把js在oop的使用 作用域 作用域&#xff08;scope&#xff09;規定了變量能夠被訪問的“范圍”&#xff0c;離開了這個“范圍”變量便不能被訪問&#xff0c; 作用域分為&#xff1a; 局部作用域、 全局作用域 1. 函數作用域&#xff1a; 在函數內部聲明的…

爬取天氣數據,利用Pyecharts作輪播圖

爬取網站鏈接&#xff1a;https://lishi.tianqi.com/xiamen/202312.html 爬取了廈門市2023年一整年的天氣數據&#xff0c;包括最高溫&#xff0c;最低溫&#xff0c;天氣&#xff0c;風力風向等 爬蟲代碼&#xff1a; import requests import pandas as pd import csv from…

UML建模案例分析-時序圖和類圖的對應關系

概念 簡單地說&#xff0c;類圖定義了系統中的對象&#xff0c;時序圖定義了對象之間的交互。 例子 一個電子商務系統&#xff0c;會員可通過電子商務系統購買零件。具體功能需求如下&#xff1a; 會員請求結賬時&#xff0c;系統驗證會員的賬戶是否處于登錄狀態&#xff1…

極狐GitLab 17.0 重磅發布,100+ DevSecOps功能更新來啦~【三】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署…

【基礎篇】1.8 C語言基礎(二)

2.9 預處理指令和宏定義 在STM32開發中,預處理和宏定義常用于配置硬件參數、啟用或禁用特定功能、以及優化代碼以適應不同的硬件配置或應用場景。通過合理地使用預處理和宏定義,我們可以編寫更加靈活、可配置和高效的代碼。 預處理指令如#include、#define等在C語言編程中起…

防火墻圖形化界面策略和用戶認證(華為)

目錄 策略概要認證概要實驗拓撲圖題目要求一要求二要求三要求四要求五要求六 策略概要 安全策略概要&#xff1a; 安全策略&#xff08;Security Policy&#xff09;在安全領域具有雙重含義。宏觀上&#xff0c;安全策略指的是一個組織為保證其信息安全而建立的一套安全需求、…

uniapp 微信小程序接入MQTT

MQTT安裝 前期準備 由于微信小程序需要wss&#xff0c;所以要有域名SSL證書 新建目錄/srv/mosquitto/config&#xff0c;/srv/mosquitto/config/cert 目錄/srv/mosquitto/config中新建配置文件mosquitto.conf&#xff0c;文件內容 persistence true persistence_location /m…

深入探索Apache Flink:流處理的藝術與實踐

在當今的大數據時代&#xff0c;流處理已成為處理實時數據的關鍵技術。Apache Flink&#xff0c;作為一個開源的流處理框架&#xff0c;以其高吞吐量、低延遲和精確一次&#xff08;exactly-once&#xff09;的語義處理能力&#xff0c;在眾多流處理框架中脫穎而出。本文將深入…

在樹莓派設備上導出系統鏡像

鏡像導出 前提條件&#xff1a; 已獲取可以正常使用的設備。已獲取鼠標、鍵盤和電源適配器。已將設備接入可正常使用的網絡。 操作步驟&#xff1a; 連接適配器給設備上電&#xff0c;正常啟動設備&#xff0c;連接鼠標和鍵盤。在終端命令窗格執行如下命令&#xff0c;安裝…

數據模型-ER圖在數據模型設計中的應用

ER圖在數據模型設計中的應用 1. ER圖概述&#xff1a;起源與發展? 實體-關系圖&#xff08;Entity Relationship Diagram&#xff0c;簡稱ER圖&#xff09;起源于1970年代&#xff0c;由Peter Chen首次提出&#xff0c;作為描述數據和信息間關系的圖形化語言。隨著數據庫技術…

[PM]流程與結構設計

流程圖 流程就是為了達到特定目標, 進行的一系列有邏輯性的操作步驟, 由兩個及已上的步驟, 完成一個完整的行為過程, 即可稱為流程, 流程圖就是對這個過程的圖形化展示 分類 業務流程圖 概念: 描述業務流程的一種圖, 通過特定符號和連線表示具體某個業務的處理步驟和過程作…

MyBatis與JDBC相比,有哪些優勢

MyBatis與JDBC&#xff08;Java Database Connectivity&#xff09;相比&#xff0c;在多個方面展現出顯著的優勢。這些優勢使得MyBatis在現代軟件開發中成為一個非常受歡迎的選擇&#xff0c;特別是在處理數據庫交互時。以下是MyBatis相比JDBC的主要優勢&#xff1a; 1. 簡化…

極狐GitLab亮相世界人工智能大會,開啟開源大模型賦能軟件研發新時代

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署…

285個地級市-胡煥庸線數據

全國285個地級市-胡煥庸線數據.zip資源-CSDN文庫 胡煥庸線&#xff1a;中國人口與生態的分界線 胡煥庸線&#xff0c;一條在中國地理學界具有劃時代意義的分界線&#xff0c;由著名地理學家胡煥庸于1935年提出。這條線從黑龍江省的璦琿&#xff08;現黑河市&#xff09;延伸至…

json-server總結

Json-server 是一個專門用于模擬 RESTful API 的工具&#xff0c;它允許前端開發人員在不依賴后端 API 的情況下進行開發&#xff0c;通過本地搭建一個 JSON 服務來快速生成 REST API 風格的后端服務。 一、主要特點與功能 快速搭建&#xff1a;Json-server 使用 JSON 文件作…

HippoRAG如何從大腦獲取線索以改進LLM檢索

知識存儲和檢索正在成為大型語言模型(LLM)應用的重要組成部分。雖然檢索增強生成(RAG)在該領域取得了巨大進步&#xff0c;但一些局限性仍然沒有克服。 俄亥俄州立大學和斯坦福大學的研究團隊推出了HippoRAG&#xff0c;這是一種創新性的檢索框架&#xff0c;其設計理念源于人類…

數學建模美賽論文文檔

目錄 1. 摘要&#xff1a;1.1 閱讀并理解題目1.2 背景介紹1.3 問題提出 2. 目錄&#xff1a;2.1 引言&#xff08;Introduction&#xff09;2.2 假設與合理性說明&#xff08;Assumptions and Justifications&#xff09;2.3 符號說明&#xff08;Notations&#xff09;2.4 模型…