什么是MyBatis

MyBatis是一款優秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射。以下是關于MyBatis的詳細介紹:

一、MyBatis的起源與發展

  • MyBatis本是Apache的一個開源項目iBATIS,2010年這個項目由Apache遷移到了Google Code,并且改名為MyBatis。2013年11月遷移到Github。
  • 當前,最新版本是MyBatis 3.5.13,發布時間是2023年03月11日。

二、MyBatis的功能特點

  • 簡單易學:MyBatis本身很小且簡單,沒有任何第三方依賴。最簡單的安裝只需兩個jar文件,并配置幾個SQL映射文件。它易于學習、易于使用,通過文檔和源代碼,開發者可以比較全面地掌握其設計思路和實現。
  • 靈活:MyBatis不會對應用程序或者數據庫的現有設計強加任何影響。SQL寫在XML里,便于統一管理和優化。
  • 解除SQL與程序代碼的耦合:MyBatis通過提供DAO(數據訪問對象)層,將業務邏輯和數據訪問邏輯分離,使得系統的設計更清晰、更易維護、更易進行單元測試。
  • 支持對象與數據庫的ORM字段關系映射:MyBatis提供映射標簽,支持對象關系映射(ORM),方便Java對象與數據庫記錄之間的轉換。
  • 支持動態SQL:MyBatis提供XML標簽,支持編寫動態SQL,使得SQL語句更加靈活、可配置。

三、MyBatis的核心組件與流程

MyBatis架構分為三層:

  • API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層接收到調用請求后,會調用數據處理層來完成具體的數據處理。
  • 數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它的主要目的是根據調用的請求完成一次數據庫操作。
  • 基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理等。這些都是共用的組件,為上層的數據處理層提供最基礎的支撐。

MyBatis的執行流程如下:

  1. 加載配置并初始化:觸發條件為加載配置文件。處理過程是將SQL的配置信息加載成為一個個MappedStatement對象(包括傳入參數映射配置、執行的SQL語句、結果映射配置),并存儲在內存中。

  2. 接收調用請求:觸發條件為調用MyBatis提供的API。傳入參數為SQL的ID和傳入參數對象。處理過程是將請求傳遞給下層的請求處理層進行處理。

  3. 處理操作請求:觸發條件為API接口層傳遞請求過來。傳入參數為SQL的ID和傳入參數對象。具體處理步驟包括:

    • 根據SQL的ID查找對應的MappedStatement對象。
    • 根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。
    • 獲取數據庫連接,根據得到的最終SQL語句和執行傳入參數到數據庫執行,并得到執行結果。
    • 根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,并得到最終的處理結果。
    • 釋放連接資源。
  4. 返回處理結果:將最終的處理結果返回。

四、MyBatis的配置與使用

  • 導入依賴:使用MyBatis需要導入MyBatis和數據庫(如MySQL)的依賴。
  • 配置yml或xml文件:配置數據庫連接信息、MyBatis的相關設置等。
  • 創建Mapper接口:定義數據訪問方法。
  • 創建Mapper XML文件:編寫SQL語句,并與Mapper接口中的方法綁定。
  • 使用SqlSession進行操作:通過SqlSession獲取Mapper接口的代理實現類,并調用其方法進行數據庫操作。

五、MyBatis的高級特性

  • 一級緩存:存儲在SqlSession中,默認開啟。第一次查詢時會先去緩存中查找,若找到則直接返回;若沒找到則去數據庫獲取,返回查詢結果并緩存。事務提交操作會清空緩存。
  • 二級緩存:構建在一級緩存之上。在收到查詢請求時,MyBatis會首先查詢二級緩存;若二級緩存未命中,再去查詢一級緩存;若一級緩存也沒有,則查詢數據庫。二級緩存與具體的命名空間綁定,一個Mapper中有一個Cache,相同Mapper中的MappedStatement共用一個Cache。
  • 延遲加載:MyBatis支持延遲加載,即只有在真正需要數據時才從數據庫中加載,這有助于提高性能。
  • 復雜映射:MyBatis支持復雜映射,包括一對一、一對多、多對多等關系映射。這可以通過resultMap手動配置實體屬性與表配置關系來實現。

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

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

相關文章

阿爾茨海默癥數據集,使用yolo,voc,coco格式對2013張原始圖片進行標注,可識別輕微,中等和正常的癥狀

阿爾茨海默癥數據集,使用yolo,voc,coco格式對2013張原始圖片進行標注,可識別輕微,中等,嚴重和正常的癥狀 數據集分割 訓練組100% 2013圖片 有效集% 0圖片 測試集&#xf…

[代碼隨想錄21二叉樹]二叉樹的修改和改造,修剪二叉樹,將有序數組轉為二叉搜索樹

前言 二叉樹章節最后的題目了,就是對搜索二叉樹的改造, 題目鏈接 669. 修剪二叉搜索樹 - 力扣(LeetCode) 108. 將有序數組轉換為二叉搜索樹 - 力扣(LeetCode) 一、修剪二叉搜索樹 思路:等會…

Android 13 Aosp SystemServer功能裁剪(PackageManager.hasSystemFeature())

系統定制,裁剪Wifi,bt等模塊 UI部分可參考: SystemUI 隱藏下拉快捷面板部分模塊(wifi,bt,nfc等)入口 Android系統啟動后Zygote進程會forkSystemServer進程。SystemServer啟動Andorid服務. frameworks/base/services/java/com/android/server/SystemServer.java if (contex…

Scala的惰性求值:深入理解與實踐

在編程中,我們經常需要處理那些計算成本高昂或者可能永遠不會用到的值。在這種情況下,惰性求值(Lazy Evaluation)是一種非常有用的策略。它允許我們推遲計算,直到這些值真正需要被使用。Scala,作為一種多功…

事務-介紹與操作四大特性

一.數據準備: 1.員工表: -- 員工管理 create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用戶名,password varchar(32) default 123456 comment 密碼,n…

Golang學習歷程【第一篇 入門】

Golang學習歷程【第一篇 入門Hello World】 1. 學習文檔2. Window 本地安裝Go2.1 安裝2.2 驗證 3. 開發環境——VsCode3.1 VsCode 安裝3.2 安裝插件3.2.1 language 語言漢化插件安裝3.2.2 Go插件安裝 4. Hello World 入門4.1 建工程4.2 創建項目文件4.3 編寫Hello World程序4.4…

微積分復習筆記 Calculus Volume 2 - 4.3 Separable Equations

4.3 Separable Equations - Calculus Volume 2 | OpenStax

Day43 動態規劃part10

300.最長遞增子序列 今天開始正式子序列系列,本題是比較簡單的,感受感受一下子序列題目的思路。 視頻講解:動態規劃之子序列問題,元素不連續!| LeetCode:300.最長遞增子序列_嗶哩嗶哩_bilibili 代碼隨想錄 class Solution {public int lengthOfLIS(int[] nums) {int[] …

Doris SQL 特技

group_concat description Syntax VARCHAR GROUP_CONCAT([DISTINCT] VARCHAR str[, VARCHAR sep] [ORDER BY { col_name | expr} [ASC | DESC]) 該函數是類似于 sum() 的聚合函數,group_concat 將結果集中的多行結果連接成一個字符串。第二個參數 sep 為字符串之…

Metaploit-永恒之藍漏洞利用

1:Metaploit介紹   本次測試主要是利用永恒之藍漏洞對windows7進行控制利用,掌握Metaploit工具的使用,知道永恒之藍的漏洞利用原理。永恒之藍是在Windows的SMB服務處理SMB v1請求時發生的漏洞,這個漏洞導致攻擊者在目標系統上可…

電容Q值、損耗角、應用

電容發熱的主要原因:紋波電壓 當電容兩端施加紋波電壓時,電容承受的是變化的電壓,由于電容內部存在寄生電阻(ESR)和寄生電感(ESL).因此電容會有能量損耗,從而產生熱量,這…

css三角形源碼

效果圖 如下圖所示&#xff0c;讓一個 div 變成三角形&#xff0c;并且可隨意更改大小&#xff0c; 本文提供了可運行示例源碼&#xff0c;直接復制即可。 實現源碼 建議創建一個 demo.html 文件&#xff0c;一鍵復制代碼運行。 <style> .div{width: 0px;height: 0p…

pyparsing restOfLine

在 pyparsing 中&#xff0c;restOfLine 是一個解析器&#xff08;parser&#xff09;&#xff0c;用于匹配當前位置到行尾的所有內容&#xff0c;通常在解析文件或處理逐行數據時非常有用。 restOfLine 的特性 匹配內容&#xff1a;從當前位置一直匹配到換行符 \n 或字符串結…

【附源碼】Electron Windows桌面壁紙開發中的 CommonJS 和 ES Module 引入問題以及 Webpack 如何處理這種兼容

背景 在嘗試讓 ChatGPT 自動開發一個桌面壁紙更改的功能時&#xff0c;發現引入了一個 wallpaper 庫&#xff0c;這個庫的入口文件是 index.js&#xff0c;但是 package.json 文件下的 type:"module"&#xff0c;這樣造成了無論你使用 import from 還是 require&…

【計算機網絡篇】計算機網絡期末復習題庫詳解

&#x1f9f8;安清h&#xff1a;個人主頁 &#x1f3a5;個人專欄&#xff1a;【計算機網絡】【Mybatis篇】 &#x1f6a6;作者簡介&#xff1a;一個有趣愛睡覺的intp&#xff0c;期待和更多人分享自己所學知識的真誠大學生。 目錄 &#x1f3af;單選 &#x1f3af;填空 &am…

JS使用random隨機數實現簡單的四則算數驗證

1.效果圖 2.代碼實現 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

GIN中間件

感覺中間件是gin中挺重要的內容&#xff0c;就拿出來單獨講講吧&#xff01; 什么是中間件&#xff1f; Gin框架允許開發者在處理請求的過程中&#xff0c;加入用戶自己的 HandlerFunc 函數。 它適合處理一些公共的業務邏輯&#xff0c;比如登錄認證、權限校驗、數據分頁、記…

SLM510A系列——24V,15到150mA單通道可調電流線性恒流LED驅動芯片

SLM510A 系列產品是單通道、高精度、可調電流線性恒流源的 LED 驅動芯片&#xff0c;在各種 LED 照明產品中非常簡單易用。其在寬電壓輸入范圍內&#xff0c;能保證極高的輸出電流精度&#xff0c;從而在大面積的光源照明中&#xff0c;都能讓 LED 照明亮度保持均勻一致。 由于…

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測基本介紹程序設計基本介紹 SVM-Adaboost集成學習是一種將支持向量機(SVM)與AdaBoost算法相結合的集成學習…

【潛意識Java】深度解讀JavaWeb開發在Java學習中的重要性

目錄 為什么Java Web開發如此重要&#xff1f; 1. 現代開發的核心技能 2. 增強系統設計與架構思維 3. 實戰經驗積累 Java Web開發的關鍵技術棧 案例&#xff1a;構建一個簡單的Java Web應用 1. 創建數據庫 2. 創建Java類 3. 創建數據庫連接工具類 4. 創建DAO類 5. 創…