MyBatis與MySQL

要理解 MyBatis 語法及其與 MySQL 的區別,首先需要明確兩者的本質定位:MyBatis 是 Java 的持久層框架(負責 Java 對象與數據庫數據的映射),而MySQL 是關系型數據庫管理系統(負責數據的存儲和 SQL 執行)。兩者屬于不同層面的技術,但在實際開發中常配合使用。

一、MyBatis 語法詳解

MyBatis 的核心是通過映射配置(XML 文件或注解)將 Java 方法與 SQL 語句關聯,簡化 JDBC 的繁瑣操作。其語法主要體現在映射規則、參數傳遞、結果處理和動態 SQL 等方面。

1. 核心配置文件(mybatis-config.xml)

用于全局配置 MyBatis,包括數據庫連接信息、映射文件路徑、插件等。
示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 環境配置(數據庫連接) --><environments default="dev"><environment id="dev"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!-- 映射文件路徑(關聯SQL與Java方法) --><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>
2. 映射文件(如 UserMapper.xml)

最常用的 MyBatis 語法載體,用于定義 SQL 語句與 Java 接口方法的映射。核心標簽包括<select><insert><update><delete>等。

(1)基礎查詢(select 標簽)
<!-- namespace對應Java接口的全類名 -->
<mapper namespace="com.example.mapper.UserMapper"><!-- id對應接口中的方法名,resultType指定返回值類型(Java對象) --><select id="getUserById" parameterType="int" resultType="com.example.pojo.User">SELECT id, username, age FROM user WHERE id = #{id}</select>
</mapper>

對應的 Java 接口:

public interface UserMapper {User getUserById(int id); // 方法名與xml中id一致
}
(2)參數傳遞
  • #{param}:預編譯參數(推薦,防止 SQL 注入),如#{id}
  • ${param}:字符串拼接(有注入風險,用于動態表名等場景),如${tableName}
  • 多參數傳遞:使用@Param注解或Map
    <select id="getUserByUsernameAndAge" resultType="User">SELECT * FROM user WHERE username = #{username} AND age = #{age}
    </select>
    

    接口:
    User getUserByUsernameAndAge(@Param("username") String name, @Param("age") int age);
    
(3)結果映射(ResultMap)

解決 Java 對象屬性與數據庫列名不匹配的問題(如 Java 屬性userName對應數據庫列user_name):

<resultMap id="userResultMap" type="User"><id property="id" column="id"/> <!-- 主鍵映射 --><result property="userName" column="user_name"/> <!-- 普通字段映射 --><result property="userAge" column="user_age"/>
</resultMap><select id="getUser" resultMap="userResultMap">SELECT id, user_name, user_age FROM user WHERE id = #{id}
</select>
(4)動態 SQL(核心特性)

根據條件動態生成 SQL,避免手動拼接 SQL 的麻煩。常用標簽:

  • <if>:條件判斷
  • <where>:自動處理 AND/OR 邏輯
  • <foreach>:遍歷集合(如 IN 查詢)
  • <choose>/<when>/<otherwise>:類似 Java 的 switch-case

示例(動態查詢用戶):

<select id="getUserByCondition" parameterType="User" resultType="User">SELECT * FROM user<where><if test="username != null">AND username LIKE CONCAT('%', #{username}, '%')</if><if test="age != null">AND age = #{age}</if></where>
</select>

示例(批量插入):

<insert id="batchInsert" parameterType="java.util.List">INSERT INTO user (username, age) VALUES<foreach collection="list" item="item" separator=",">(#{item.username}, #{item.age})</foreach>
</insert>
(5)注解方式(簡化配置)

對于簡單 SQL,可直接用注解替代 XML:

public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(int id);@Insert("INSERT INTO user (username, age) VALUES (#{username}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id") // 返回自增主鍵void insertUser(User user);
}

二、MyBatis 與 MySQL 的區別

維度MyBatisMySQL
本質Java 持久層框架(ORM 工具)關系型數據庫管理系統(DBMS)
作用簡化 Java 與數據庫的交互(映射對象與 SQL)存儲數據、執行 SQL 語句、管理數據完整性
語法形式基于 XML 標簽(如<select><if>)或 Java 注解(如@Select基于 SQL 語言(如SELECTINSERTJOIN
處理對象關聯 Java 方法與 SQL,處理對象與數據的映射直接操作數據表、行、列等數據結構
執行依賴依賴數據庫(如 MySQL、Oracle)執行 SQL自身作為數據庫引擎,直接執行 SQL
核心能力動態 SQL 生成、參數映射、結果映射、事務管理等數據存儲、索引、事務(ACID)、SQL 解析執行等

三、總結

  • MyBatis是 “中間層”,專注于 Java 代碼與 SQL 的映射,解決 “對象 - 關系” 不匹配問題,簡化數據庫操作的代碼編寫。
  • MySQL是 “數據存儲層”,專注于數據的存儲和 SQL 的執行,是 MyBatis 操作的目標數據庫之一。

實際開發中,MyBatis 負責 “怎么調用 SQL”,而 MySQL 負責 “怎么執行 SQL 并返回數據”,兩者配合完成從 Java 對象到數據庫數據的全流程操作。

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

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

相關文章

Vulnhub Noob靶機復現(附提權)

一、安裝靶機 下載地址&#xff1a;https://download.vulnhub.com/noob/Noob.ova 下載好后使用VM打開配置如下。 二、主機發現 使用nmap掃描確認靶機ip(192.168.29.138) nmap -sn 192.168.29.1/24 三、端口掃描 使用nmap工具掃描全部端口以防遺漏。 nmap -A -p- 192.168.…

文心4.5開源測評:國產大模型的輕量化革命與全棧突破

> 當算力成本成為AI落地的最大攔路虎,一款僅需2.1GB顯存、支持32K上下文的輕量級大模型如何撬動產業智能化的大門? ^ - ^ 2025年6月30日,百度正式開源文心大模型4.5系列,以**10款全維度模型矩陣**(0.3B至424B參數)刷新國產開源模型的技術邊界。這不僅是參數規模的躍進…

【自存用】mumu模擬器+mitmproxy配置

一、 安裝證書 下載mitmproxy進行安裝。cmd 輸入 mitmdump產生證書在C:\Users\賬號名.mitmproxy找到mitmproxy-ca.p12,雙擊進入證書導入向導&#xff0c;一直點下一頁&#xff0c;直到選擇證書存儲的地方選擇【受信任的根證書頒發機構】&#xff0c;后面的繼續點【是】或【完成…

Java中的字符串 - String 類

在C語言中若要表示字符串只能使用字符數組或者字符指針&#xff0c;Java語言則專門提供了 String 類&#xff0c;在面向對象編程中具有重要地位。在開發和校招筆試中&#xff0c;字符串也是常客。 目錄 一、字符串的構造 二、常用方法 2.1 字符串的拼接 2.2 字符串之間的比…

[網安工具] Web 漏洞掃描工具 —— AWVS · 使用手冊

&#x1f31f;想了解其它網安工具&#xff1f;看看這個&#xff1a;[網安工具] 網絡安全工具管理 —— 工具倉庫 管理手冊 Acunetix | Web Application Security ScannerAcunetix is an end-to-end web security scanner that offers a 360 view of an organization’s securi…

丑數-優先隊列/三指針/動態規劃

丑數 Solution 核心思路&#xff1a; 注意的幾個點&#xff1a; 1.優先隊列改變排序&#xff1a; priority_queue<int,vector<int>,greater<int>> q;2.用來判斷是否訪問過&#xff0c;可以用unordered_set 注意set的插入用的是insert而不是push unorder…

FPGA(或者數字電路)中組合邏輯和時序邏輯是怎么劃分的

1.組合邏輯 在FPGA中&#xff0c;組合邏輯是哪些沒有觸發器作為存儲單元的電路 LUT查找表就是組合邏輯電路&#xff0c;無時鐘信號參與。 加法器&#xff0c;邏輯門&#xff0c;多路選擇器&#xff0c;譯碼器2.時序邏輯電路 輸出依賴于當前輸入&#xff0c;還依賴于過去 觸發器…

【音視頻】WebRTC 中的RTP、RTCP、SDP、Candidate

一、RTP 1.1 RTP協議介紹 在 WebRTC 中&#xff0c;RTP&#xff08;Real-time Transport Protocol&#xff0c;實時傳輸協議&#xff09;是音視頻媒體數據傳輸的核心協議&#xff0c;負責實時數據的封裝、傳輸與解封裝&#xff0c;為實時交互提供時序、同步、分片重組等關鍵能…

accept函數及示例

這次我們介紹 accept 函數&#xff0c;它是 TCP 服務器用來接受客戶端連接請求的核心系統調用。1. 函數介紹 accept 是一個 Linux 系統調用&#xff0c;專門用于TCP 服務器&#xff08;使用 SOCK_STREAM 套接字&#xff09;。它的主要功能是從監聽套接字&#xff08;通過 liste…

【Java】在一個前臺界面中動態展示多個數據表的字段及數據

企業的生產環境中&#xff0c;如果不允許直接操作數據表中的數據&#xff0c;則需要開發一個前臺界面&#xff0c;在必要時實現對多個數據表中數據的增刪改查&#xff0c; 此時就需要后端將Oracle表字段及數據查詢返回前端動態展示…… 一、Oracle特定元數據查詢 使用JDBC獲取O…

MySQL(174)如何理解MySQL的多版本并發控制(MVCC)?

MySQL的多版本并發控制&#xff08;MVCC, Multi-Version Concurrency Control&#xff09;是一種用于實現高并發性的機制&#xff0c;它允許多個事務同時讀取和寫入數據&#xff0c;而不會相互阻塞。MVCC主要在InnoDB存儲引擎中實現&#xff0c;通過維護數據的多個版本來實現一…

Docker--將非root用戶添加docker用戶組,解決頻繁sudo執行輸入密碼的問題

一、為什么要有docker用戶組&#xff1f; 根本原因&#xff1a; Linux的設備訪問權限控制機制 Docker守護進程&#xff08;dockerd&#xff09;運行時會創建一個特殊的Unix套接字文件&#xff0c;如&#xff1a;/var/run/docker.sock。 這個文件就像一個“門”&#xff0c;所有…

C語言---函數的遞歸與迭代

遞歸的理解與限制條件 所謂函數遞歸就是遞推加回歸的過程&#xff0c;就是函數自己調用自己。遞歸的思想就是把復雜的問題拆分成與原來那個大問題相似的子問題來求解&#xff0c;大事化小&#xff0c;像剝洋蔥一樣&#xff0c;最終把問題解決。 遞歸的限制條件&#xff1a; 一個…

freqtrade在docker運行一個dryrun實例

檢查配置 freqtrade trade --config user_data/config.json --strategy MlStrategy config文件,這個配置做期貨為主&#xff0c;靜態配置了交易對&#xff0c;同時端口和第一個bot要不一樣&#xff0c;不然沒有辦法進行監控&#xff0c;甚至要沖突了。10S鐘進行循環&#xff0c…

單片機學習筆記.PWM

PWM原理&#xff1a; 頻率占空比&#xff1a;精度占空比變化步距 電機驅動電路&#xff1a;利用PWM實現呼吸燈代碼 sbit LEDP2^0;//引腳定義unsigned char Time,i;//變量定義void Delay(unsigned int t)//定義延時 {while(t--); }main函數里&#xff1a;int main() {unsigned c…

【Git】解決使用SSH連接遠程倉庫時需要多次輸入密碼的問題

問題產生的原因&#xff1a;你的SSH私鑰設置了密碼短語&#xff08;passphrase&#xff09;。解決問題的方法&#xff1a;使用SSH代理&#xff08;ssh-agent&#xff09;&#xff0c;ssh-agent是一個后臺運行程序&#xff0c;它會記住你解鎖過的SSH私鑰的密碼短語&#xff0c;這…

機器學習—邏輯回歸

一介紹邏輯回歸是處理二分類問題的線性模型&#xff0c;通過sigmoid函數將線性輸出映射到[0,1]&#xff0c;輸出事件發生概率&#xff0c;廣泛用于預測與分類。如果做坐標的話&#xff0c;特征就是p1和p2&#xff0c;結果就是y紅的與綠的 二Sigma函數代碼說明Sigmoid 函數定義&…

深入解讀OpenTelemetry分布式鏈路追蹤:原理與實踐指南

深入解讀OpenTelemetry分布式鏈路追蹤&#xff1a;原理與實踐指南 分布式系統在微服務架構下&#xff0c;服務調用鏈越來越復雜&#xff0c;追蹤單次請求在各個微服務之間的執行情況成為運維與性能優化的關鍵。作為新一代開源標準&#xff0c;OpenTelemetry為分布式追蹤、指標與…

【0基礎PS】PS工具詳解--圖案圖章工具

目錄前言一、圖案圖章工具基礎認知?二、工具選項欄參數詳解?三、圖案圖章工具應用案例?總結前言 在 Adobe Photoshop 這一強大的圖像處理軟件中&#xff0c;圖案圖章工具是一個獨具特色的功能&#xff0c;它允許用戶利用預先定義好的圖案進行繪畫操作。 一、圖案圖章工具基…

劇本殺小程序系統開發:構建數字化劇本殺生態圈

在快節奏的現代生活中&#xff0c;人們越來越渴望在閑暇之余找到一種既能放松心情又能增進社交的方式。劇本殺&#xff0c;作為一種集推理、表演、社交于一體的新興娛樂形式&#xff0c;恰好滿足了這一需求。然而&#xff0c;隨著市場的不斷擴大&#xff0c;如何保持劇本殺的新…