MyBatis:SQL與Java的智能橋梁

MyBatis:SQL 與 Java 的「智能翻譯官」

—— 用 極簡的方式 連接數據庫和 Java 對象,告別 JDBC 的繁瑣操作!


核心定位:半自動化 ORM 框架

對比項JDBC 原生操作MyBatis 解決方案
SQL 編寫拼字符串(易出錯、難維護)XML/注解 清晰隔離 SQL
結果映射手動遍歷 ResultSet → 對象自動映射 結果到 Java 對象
連接管理手動開/關 Connection、Statement自動管理資源(防泄漏)
參數傳遞setString(1, “Alice”) 硬編碼動態參數#{} 防 SQL 注入)

📌 ORM (對象關系映射):將數據庫表 自動映射為 Java 對象(如 User 類 → user 表)


核心組件圖解

調用
執行
映射
操作
返回數據
封裝結果
返回對象
Java 代碼
SqlSession
Mapper 接口
XML 或 注解 SQL
數據庫

核心優勢詳解

1. SQL 自由掌控

? 靈活編寫復雜 SQL(存儲過程、多表 JOIN)
? 動態 SQL:根據條件智能拼接 SQL 片段

<select id="findUsers">SELECT * FROM users<where><if test="name != null">   <!-- 動態條件 -->AND name = #{name}</if><if test="minAge != null">AND age >= #{minAge}</if></where>
</select>
2. 自動對象映射

數據庫字段 → Java 對象屬性(支持嵌套對象)

<resultMap id="userMap" type="User"><id property="id" column="user_id"/>       <!-- 主鍵映射 --><result property="name" column="user_name"/><!-- 字段映射 --><!-- 嵌套對象映射 --><association property="dept" javaType="Department"><result property="deptName" column="dept_name"/></association>
</resultMap>
3. 解耦神器
  • SQL 與 Java 代碼分離(XML 管理 SQL)
  • 接口 + 注解 零 SQL 侵入方案(推薦)
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);
}

核心操作流程(以查詢為例)

  1. 定義 Mapper 接口
public interface UserMapper {User getUserById(@Param("id") int id);
}
  1. 編寫 SQL 映射(XML 或注解)
<!-- UserMapper.xml -->
<select id="getUserById" resultType="User">SELECT * FROM users WHERE id = #{id}
</select>
  1. 調用 MyBatis API
// 1. 加載配置(數據源、Mapper 路徑)
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);// 2. 獲取會話
try (SqlSession session = factory.openSession()) {// 3. 獲取 Mapper 代理對象UserMapper mapper = session.getMapper(UserMapper.class);// 4. 執行查詢 → 自動返回 User 對象User user = mapper.getUserById(1001); 
}

進階特性

特性用途
一級/二級緩存減少數據庫查詢(一級緩存默認開啟,二級緩存需手動配置)
插件機制攔截 SQL 執行(實現分頁、審計等)
類型處理器自定義 Java 類型 ? 數據庫類型轉換(如 List 轉 JSON 存儲)
動態 SQL 標簽<foreach>, <choose>, <bind> 簡化復雜查詢

適用場景

  • ? 需精細控制 SQL 的項目(如金融系統、報表查詢)
  • ? 遺留數據庫(表設計不符合 ORM 規范)
  • ? 高性能需求場景(比全自動 ORM 如 Hibernate 更輕量)
  • ? 簡單 CRUD 小項目(可選 Spring Data JPA)

代碼對比:JDBC vs MyBatis

// ---------- JDBC 原生查詢(20+行)-----------
Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id=?");
stmt.setInt(1, 1001); 
ResultSet rs = stmt.executeQuery();User user = null;
if (rs.next()) {user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));// ... 手動賦值所有字段
}
rs.close(); stmt.close(); conn.close(); // 必須手動關閉!// ---------- MyBatis 等效操作(1行)-----------
User user = userMapper.getUserById(1001); // SQL自動執行+結果封裝

💡 總結
MyBatis = SQL 掌控力 + 開發高效率
—— 像寫原生 SQL 一樣靈活,像用 ORM 一樣省力!

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

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

相關文章

自動駕駛控制系統

目錄 控制系統概述 無人車控制架構設計 自動駕駛控制核心技術 車輛縱向控制 車輛橫向控制 自動駕駛控制方法 自動駕駛控制技術方案 人機交互系統 控制系統概述 控制技術是智能駕駛的關鍵,旨在環境感知技術的基礎之上,根據決策規劃出目標軌跡,通過縱向和橫向控制系統…

網絡安全基石:從弱口令治理到動態防御體系的構建

引言&#xff1a;數字時代的防御困局 在5G與物聯網技術全面落地的數字新基建時代&#xff0c;企業網絡資產規模呈現指數級增長。Verizon《2023年數據泄露調查報告》顯示&#xff0c;61%的安全事件直接源于憑證失竊&#xff0c;而其中81%的攻擊成功案例可溯源至初始口令強度的不…

Error: fatal: detected dubious ownership in repository at

這個錯誤是 Git 在新版中引入的一種 安全檢查機制&#xff0c;目的是防止不同用戶訪問同一個 Git 倉庫目錄&#xff0c;避免潛在的權限或安全問題。你的情況是&#xff1a;倉庫目錄是屬于另一個用戶。當前以管理員用戶 OVERSPREAD/Administrator 運行 Git。Git 為了安全起見&am…

嵌入式 數據結構學習 (六) 樹、哈希表與內核鏈表

一、樹(Tree)結構詳解1. 樹的基本概念樹的核心特性非線性結構&#xff1a;數據元素之間存在一對多的層次關系遞歸定義&#xff1a;樹的子樹仍然是樹專業術語&#xff1a;度(Degree)&#xff1a;結點擁有的子樹數葉子結點&#xff1a;度為0的結點層次(Level)&#xff1a;根為第1…

封裝WebSocket

一個基于原生 WebSocket 的封裝庫&#xff0c;實現了自動重連、心跳檢測等功能&#xff0c;用于在前端應用中穩定地與后端 WebSocket 服務通信。下面從設計思路、關鍵功能等方面進行詳細分析&#xff1a;設計思路 這個封裝庫采用單例模式設計&#xff0c;全局維護一個 WebSocke…

SLICEGPT: COMPRESS LARGE LANGUAGE MODELSBY DELETING ROWS AND COLUMNS

發表&#xff1a;ICLR24 機構&#xff1a;ETH Zurich 連接&#xff1a;https://arxiv.org/pdf/2401.15024 ABSTRACT 大型語言模型&#xff08;Large Language Models, LLMs&#xff09;已成為自然語言處理的基石&#xff0c;但其使用伴隨著在計算和內存資源方面的高昂代價。…

Python 【技術面試題和HR面試題】? 循環結構、控制語句及綜合應用問答

1.技術面試題 &#xff08;1&#xff09;詳細描述單調棧的工作原理和應用場景 答&#xff1a; 原理 維護棧內元素單調遞增 / 遞減&#xff0c;新元素入棧前&#xff0c;彈出破壞單調性的棧頂&#xff0c;保持單調。 應用場景 排隊比身高&#xff0c;搭積木找最大的空地 &#x…

100G系列光模塊產品與應用場景介紹

在當今數字化時代&#xff0c;網絡流量呈爆炸式增長&#xff0c;對數據傳輸速度和帶寬的要求也越來越高。100G 光模塊作為高速數據傳輸的關鍵組件&#xff0c;因其卓越的高速傳輸能力&#xff0c;已成為數據中心、云計算、企業網絡以及 5G 通信網絡等領域的重要組成部分。接下來…

運籌說 第140期 | 從直覺到算法:這些奠基人如何塑造了啟發式方法的科學根基?

運籌說建構知識體系&#xff0c;解析學習要點運 籌 優 化 領 域 教 學 媒 體視頻課程已上線&#xff01;&#xff01;!歡迎大家關注同名抖音和嗶哩嗶哩賬號&#xff01;在人工智能與優化科學的浩瀚星空中&#xff0c;啟發式算法如同一把鑰匙&#xff0c;為人類打開了處…

Flutter編譯安卓應用時遇到的compileDebugJavaWithJavac和compileDebugKotlin版本不匹配的問題

記一次flutter應用&#xff0c;編譯安卓時&#xff0c;報的一個compileDebugJavaWithJavac和compileDebugKotlin版本本匹配的問題。 最終定位的原因是項目一來了audioplayers組件。 audioplayers組件有依賴了audioplayers_android&#xff0c; 它使用1.8編譯的。 版本過低。后來…

linux-權限管理

linux-權限管理一、權限的基本類型二、權限的表示方式1. 字符形式&#xff08;rwx&#xff09;2. 數字形式三、權限管理常用命令1. chmod2. chown3. chgrp四、隱藏權限1. lsattr2. chattr五、權限掩碼六、特別權限位1. suid2. sgid3. Sticky Bit七、權限委托1. 授權用戶2. 授權…

從FCOS3D到PGD:看深度估計如何快速搭建你的3D檢測項目

【導讀】 還記得那個曾經在單目3D目標檢測領域掀起熱潮的 FCOS3D 嗎&#xff1f;在后續更新中他們又推出了全新升級版——PGD&#xff08;Probabilistic and Geometric Depth&#xff09;最有意思的是&#xff0c;這次他們徹底換了路線&#xff1a;從原先的“直接回歸深度”&a…

Apache Cloudberry 向量化實踐(三)重塑表達式構建路徑:Gandiva 優化實戰

在向量化執行系統中&#xff0c;表達式構建是不可或缺的基礎環節。無論是 SQL 中的投影、篩選&#xff0c;還是分區、聚合、排序&#xff0c;最終都需轉化為底層執行引擎能識別和執行的表達式樹。而在 Apache Cloudberry 向量化執行框架中&#xff0c;這一過程由 Gandiva 表達式…

Windows刪除文件或者拔出U盤顯示正在使用/占用解決辦法

1、復制文件地址2、打開任務管理器&#xff0c;選擇左側【性能】3、打開資源監視器4、選擇資源監視器中的CPU5、粘貼你復制的占用文件地址6、除了explore.exe以外&#xff0c;其他的關聯的句柄都選中&#xff0c;然后右鍵結束

自由學習記錄(68)

&#x1f9e0; blender為什么不用 M 或 T&#xff1f; 鍵位含義為什么沒選MMove&#xff1f;其實被用作「Move to Collection」等功能不符合歷史定義&#xff0c;而且功能太多了TTransform&#xff1f; 但 transform 是一個總稱&#xff08;含移動、旋轉、縮放&#xff09;T 被…

ReactNative【實戰系列教程】我的小紅書 8 -- 我(含左側彈窗菜單,右下角圖標等)

最終效果點左上角菜單按鈕&#xff0c;彈出左側菜單后代碼實現app/(tabs)/mine.tsx import icon_add from "/assets/icons/icon_add.png"; import mine_bg from "/assets/images/mine_bg.png"; import Heart from "/components/Heart"; import a…

C++性能優化實戰:從理論到落地的五大核心策略

在當今這個對計算效率要求極高的時代&#xff0c;C作為系統級編程語言的王者&#xff0c;其性能優化能力依然是無可替代的核心競爭力。本文將分享我在大型分布式系統開發中積累的C性能優化實戰經驗&#xff0c;這些經驗幫助我們將關鍵組件的吞吐量提升了300%&#xff0c;延遲降…

字節 Seed 團隊聯合清華大學智能產業研究院開源 MemAgent: 基于多輪對話強化學習記憶代理的長文本大語言模型重構

&#x1f525; 最新動態!!! [2025/07] 我們提供了快速啟動腳本&#xff0c;讓使用MemAgent變得超級簡單&#xff0c;詳情請見下方"快速入門"部分。[2025/06] 我們發布了RL-MemAgent-14B和RL-MemAgent-7B模型&#xff0c;在350萬token上下文任務中實現了近乎無損的性…

【unitrix】 4.20 類型級二進制數減法實現解析(sub.rs)

一、源碼 這段代碼實現了一個用于統計二進制補碼整數位數的系統&#xff0c;支持多種自定義數值類型&#xff08;Z0、P1、N1、B0、B1&#xff09;。 use core::mem::size_of; use crate::number::{Z0, P1, N1, B0, B1, Var};/// 統計二進制位數的 trait pub trait BitLength {f…

手把手教你安全刪除Anaconda虛擬環境(避坑指南)

文章目錄一、刪除前必看清單&#xff08;超級重要&#xff09;二、三種刪除方法對比&#xff08;建議收藏&#xff09;方法1&#xff1a;官方推薦命令&#xff08;最安全&#xff09;方法2&#xff1a;暴力刪除大法&#xff08;快速但需謹慎&#xff09;方法3&#xff1a;核彈級…