MyBatis 詳解

1. 什么是 MyBatis?

MyBatis?是一款優秀的?持久層框架,它通過 XML 或注解配置,將 Java 對象(POJO)與數據庫操作(SQL)進行靈活映射,簡化了 JDBC 的復雜操作。

  • 核心思想SQL 與代碼分離,開發者可專注 SQL 優化,同時享受 ORM(對象關系映射)的便捷。

  • 定位:介于 JDBC 和全自動 ORM(如 Hibernate)之間的半自動化框架,靈活控制 SQL,適合復雜查詢和高性能場景。


2. 核心特性
特性說明
動態 SQL支持條件分支(<if><choose>)、循環(<foreach>)等動態生成 SQL。
參數映射自動將 Java 對象屬性映射到 SQL 參數(#{property})。
結果集映射將查詢結果自動封裝為 Java 對象(<resultMap>)。
緩存機制提供一級緩存(SqlSession 級別)和二級緩存(Mapper 級別)。
插件擴展支持自定義插件(如分頁、日志),通過攔截器修改 MyBatis 核心行為。

3. 核心組件

? ? 1.SqlSessionFactory

  • 作用:創建 SqlSession 的工廠類,全局唯一,通常由?SqlSessionFactoryBuilder?解析配置文件生成。

  • 配置來源:XML 文件(如?mybatis-config.xml)或 Java 代碼。

? ? 2.SqlSession

  • 作用:執行 SQL 操作、獲取 Mapper 接口實例。非線程安全,需確保每次請求單獨創建。

  • 關鍵方法

    <T> T getMapper(Class<T> type);  // 獲取 Mapper 接口實例
    int insert(String statement, Object parameter);  // 直接執行 SQL

? ? 3.Mapper 接口與 XML 映射文件

  • Mapper 接口:定義數據庫操作方法,方法名與 XML 中的 SQL ID 對應。

  • XML 映射文件:編寫 SQL 語句,配置參數/結果映射。

? ? 4.Executor

  • 作用:SQL 執行器,處理緩存、事務、語句調度等核心邏輯。

  • 類型SimpleExecutor(默認)、ReuseExecutor(重用預處理語句)、BatchExecutor(批處理)。


4. 工作原理
  1. 配置加載

    • 解析?mybatis-config.xml,初始化數據源、事務管理器、Mapper 掃描路徑等。

    • 加載 Mapper XML 文件或掃描 Mapper 接口,構建 SQL 映射關系。

  2. SqlSession 創建

    • 通過?SqlSessionFactory.openSession()?創建 SqlSession,內部包含?Executor?和事務控制。

  3. SQL 執行流程

    • Mapper 代理:通過動態代理(如?MapperProxy)將接口方法調用轉發給 SqlSession。

    • SQL 解析:根據方法名找到對應的 SQL 語句,處理動態標簽(如?<if>)。

    • 參數處理:將 Java 對象轉換為 SQL 參數(ParameterHandler)。

    • SQL 執行:通過?Executor?執行 JDBC 操作,返回結果。

    • 結果映射:將 ResultSet 轉換為 Java 對象(ResultSetHandler)。


5. 緩存機制
緩存級別作用范圍生命周期開啟方式
一級緩存SqlSession 級別隨 SqlSession 關閉或清空默認開啟
二級緩存Mapper 級別應用生命周期,可跨 SqlSession 共享XML 中配置?<cache/>?標簽開啟

6. 常見問題
  1. MyBatis 與 Hibernate 的區別?

    • MyBatis:半自動化,需手動寫 SQL,靈活控制細節。

    • Hibernate:全自動化,通過 HQL 操作對象,適合快速開發。

  2. #{} 和 ${} 的區別?

    • #{}:預編譯參數(防 SQL 注入),如?WHERE id = ?

    • **??:字符串替換(慎用),如動態表名‘ORDERBY??:字符串替換(慎用),如動態表名‘ORDERBY{column}`。

  3. 如何實現分頁?

    • 物理分頁:使用插件(如 PageHelper)或數據庫方言(LIMIT)。

    • 內存分頁:查詢全部數據后在代碼中分頁(不推薦)。


7. 總結
  • 優勢:靈活控制 SQL、動態 SQL 強大、性能優化空間大。

  • 適用場景:復雜查詢、需深度優化 SQL、對數據庫訪問有精細控制需求的項目。

  • 學習路徑:掌握 XML/注解配置 → 理解動態 SQL → 熟悉緩存機制 → 整合 Spring/Spring Boot。


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

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

相關文章

循環神經網絡 - 深層循環神經網絡

如果將深度定義為網絡中信息傳遞路徑長度的話&#xff0c;循環神經網絡可以看作既“深”又“淺”的網絡。 一方面來說&#xff0c;如果我們把循環網絡按時間展開&#xff0c;長時間間隔的狀態之間的路徑很長&#xff0c;循環網絡可以看作一個非常深的網絡。 從另一方面來 說&…

GoLand 標紅但程序可正常運行:由符號索引緩存失效引起的假報錯問題

問題描述&#xff1a; 在 GoLand 中&#xff0c;api/tls.go 文件中引用了 api/type.go 中定義的結構體 Options&#xff0c;但 GoLand 把 Options 標紅顯示為未定義&#xff08;undefined symbol&#xff09;&#xff0c;盡管程序實際可以正常編譯和運行&#xff08;go build /…

python-各種文件(txt,xls,csv,sql,二進制文件)讀寫操作、文件類型轉換、數據分析代碼講解

1.文件txt讀寫標準用法 1.1寫入文件 要讀取文件&#xff0c;首先得使用 open() 函數打開文件。 file open(file_path, moder, encodingNone) file_path&#xff1a;文件的路徑&#xff0c;可以是絕對路徑或者相對路徑。mode&#xff1a;文件打開模式&#xff0c;r 代表以…

Uniapp:確認框

目錄 一、 出現場景二、 效果展示三、具體使用 一、 出現場景 在項目的開發中&#xff0c;會經常出現刪除數據的情況&#xff0c;如果直接刪除的話&#xff0c;可能會存在誤刪&#xff0c;用戶體驗不好&#xff0c;所以需要增加一個消息提示&#xff0c;提醒用戶是否刪除。 二…

解密 Vue 打包策略

1. 總體概述 在現代前端開發中&#xff0c;Vue 已成為流行框架之一&#xff0c;開發者通常使用 webpack、vite 或 vue-cli 來構建項目。可能會困惑&#xff1a; 為什么源碼中的資源引用路徑與打包后實際產出的路徑會不一樣&#xff1f;靜態路徑與動態路徑到底如何正確書寫&am…

Golang|接口并發測試和壓力測試

文章目錄 這里出現某些獎品和數據庫中庫存量不一致的問題原因就是在并發的情況下&#xff0c;sync.Map仍然會出現臟寫問題&#xff0c;就是在同時操作下的操作覆蓋問題可以先把數據放到channel里&#xff0c;然后用一個單一的協程負責讀取channel并寫入map

CentOS下,Xftp中文文件名亂碼的處理方式

亂碼原因 中文版Windows默認使用GBK編碼&#xff0c;現代Linux發行版&#xff08;如CentOS、Ubuntu等&#xff09;默認使用UTF-8編碼。Windows下正常的編碼&#xff0c;可能在linux下無法識別&#xff0c;例如&#xff1a;Windows的GBK字節0xD6D0被Linux用UTF-8解碼時&#xf…

解決 Vue 中 input 輸入框被賦值后,無法再修改和編輯的問題

目錄 需求&#xff1a; 出現 BUG&#xff1a; Bug 代碼復現 解決問題&#xff1a; 解決方法1&#xff1a; 解決方法2 關于 $set() 的補充&#xff1a; 需求&#xff1a; 前段時間&#xff0c;接到了一個需求&#xff1a;在選擇框中選中某個下拉菜單時&#xff0c;對應的…

【含文檔+PPT+源碼】基于微信小程序的衛生院預約掛號管理系統的設計與實現

項目視頻介紹&#xff1a; 畢業作品基于微信小程序的衛生院預約掛號管理系統的設計與實現 課程簡介&#xff1a; 本課程演示的是一款基于微信小程序的衛生院預約掛號管理系統的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習…

【Vue】案例——To do list:

【Vue】案例——To do list&#xff1a; 一、案例介紹&#xff1a;二、效果展示&#xff08;如圖&#xff09;三、主要功能&#xff1a;四、技術要點&#xff1a;補充&#xff1a;【Vue】Vue模板語法(點擊可跳轉)補充&#xff1a;【Vue】數據綁定&#xff08;單雙向&#xff09…

導入 .sql 文件到 云服務器上的MySQL中

導入 .sql 文件到 云服務器上的MySQL中 步驟 1&#xff1a;確保 .sql 文件已上傳到云服務器步驟 2&#xff1a;登錄到云服務器步驟 3&#xff1a;檢查文件是否成功傳輸步驟 4&#xff1a;登錄 MySQL步驟 5&#xff1a;創建空數據庫&#xff08;如果尚未創建&#xff09;步驟 6&…

我的機器學習之路(初稿)

文章目錄 一、機器學習定義二、核心三要素三、算法類型詳解1. 監督學習&#xff08;帶標簽數據&#xff09;2. 無監督學習&#xff08;無標簽數據&#xff09;3. 強化學習&#xff08;決策優化&#xff09;(我之后主攻的方向) 四、典型應用場景五、學習路線圖六、常見誤區警示七…

VueDOMPurifyHTML 防止 ??XSS(跨站腳本攻擊)?? 風險

VueDOMPurifyHTML 是一個 ??Vue.js 插件??&#xff0c;用于在 v-html 指令中安全地渲染 HTML 內容&#xff0c;防止 ??XSS&#xff08;跨站腳本攻擊&#xff09;?? 風險。 ??作用?? ??解決 v-html 的安全問題?? Vue 的 v-html 會直接渲染原始 HTML&#xff0…

【數據結構】之散列

一、定義與基本術語 &#xff08;一&#xff09;、定義 散列&#xff08;Hash&#xff09;是一種將鍵&#xff08;key&#xff09;通過散列函數映射到一個固定大小的數組中的技術&#xff0c;因為鍵值對的映射關系&#xff0c;散列表可以實現快速的插入、刪除和查找操作。在這…

How AI could empower any business - Andrew Ng

How AI could empower any business - Andrew Ng References 人工智能如何為任何業務提供支持 empower /?m?pa??(r)/ vt. 授權&#xff1b;給 (某人) ...的權力&#xff1b;使控制局勢&#xff1b;增加 (某人的) 自主權When I think about the rise of AI, I’m reminded …

微服務的服務調用詳解以及常見解決方案對比

微服務服務調用詳解 1. 服務調用分類 服務調用根據通信方式、同步性、實現模式可分為以下類型&#xff1a; 按通信協議分類 類型典型協議/框架特點RPC&#xff08;遠程過程調用&#xff09;Dubbo、gRPC、Apache Thrift高性能、二進制協議、強類型定義HTTP/RESTSpring RestTe…

MySQL:B+樹索引

InnoDB索引方案 為了使用二分法快速定位具體的目錄項&#xff0c;假設所有目錄項都可以在物理存儲器上連續存儲&#xff0c;有以下問題&#xff1a; InnoDB使用頁為管理存儲空間的基本單位&#xff0c;最多只能保證16KB的連續存儲空間&#xff0c;記錄數據量多可能需要非常大…

THCON 2025

Crypto OTPas_ouf 用10個字符異或加密的jpg圖片&#xff0c;通過頭得到key再恢復原圖 Mammoths Personnal Slot Machine 梅森旋轉恢復 from pwn import * from randcrack import RandCrack from tqdm import trange context.log_level errorp remote(74.234.198.209, 33…

3.8 字符串的常用函數

重點&#xff1a;字符串的常用函數 #1.測試轉換大小寫 lower:大寫->小寫 upper&#xff1a;小寫->大寫 swapcase&#xff1a;自動將大寫轉小寫小寫轉大寫 print("ABC".lower()) #abcprint("abc".upper()) #ABCprint…

Docker:SkyWalking 鏈路追蹤的技術指南

1、簡述 Apache SkyWalking 是一個開源的 APM(應用性能監控)工具,能夠實現分布式系統的全鏈路監控、性能分析以及服務依賴關系分析。SkyWalking 支持多種語言的探針,提供強大的可視化監控和分析能力,是微服務架構下性能調優和問題排查的利器。 樣例代碼: https://gitee.…