在 Spring Boot 中使用 MyBatis-Plus 的詳細教程

前言

在現代的 Java Web 開發中,Spring Boot 和 MyBatis 已經成為主流框架組合。為了提升開發效率和簡化數據庫操作,MyBatis-Plus(簡稱 MP)應運而生。它是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

本文將詳細介紹如何在 Spring Boot 項目中集成并使用 MyBatis-Plus,包括:

  • 環境搭建
  • 基本 CRUD 操作
  • 使用 Wrapper 構造查詢條件
  • 注解的使用(如 @TableName@TableId@TableField
  • 分頁插件配置
  • 多表關聯查詢示例

一、環境準備

1. 創建 Spring Boot 項目

你可以使用 Spring Initializr 創建一個基礎項目,選擇以下依賴:

  • Spring Web
  • MyBatis Framework
  • MySQL Driver

或者使用 IDEA 或 Eclipse 插件創建。

2. 添加 MyBatis-Plus 依賴

pom.xml 文件中添加 MyBatis-Plus 的 Starter 依賴:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>

如果你需要使用代碼生成器,也可以加上:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version>
</dependency>

3. 配置數據庫連接

application.yml 中配置數據源:

spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC&characterEncoding=utf8username: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:mapper-locations: classpath*:mapper/**/*.xmltype-aliases-package: com.example.entity

二、實體類與注解

1. 表結構示例

假設我們有一個用戶表 user

CREATE TABLE user (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,email VARCHAR(100)
);

2. 實體類定義

package com.example.entity;import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;@Data
@TableName("user") // 映射到 user 表
public class User {@TableId(value = "id", type = IdType.AUTO) // 主鍵映射private Long id;@TableField("name") // 字段映射,默認自動識別駝峰命名轉下劃線private String name;@TableField("age")private Integer age;@TableField("email")private String email;
}

說明:

  • @TableName: 映射實體類與數據庫表名。
  • @TableId: 標識主鍵字段,可指定數據庫列名。
  • @TableField: 映射普通字段,若不寫則默認按字段名轉換成下劃線匹配數據庫列。
  • IdType.AUTO: 自動識別主鍵類型(自增、UUID 等),也可手動設置如 IdType.NONE, IdType.INPUT 等。

三、Mapper 接口與 Service 層

1. Mapper 接口

package com.example.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;public interface UserMapper extends BaseMapper<User> {
}

繼承 BaseMapper 后即可獲得基本的 CRUD 方法。

2. Service 層接口與實現

package com.example.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;public interface UserService extends IService<User> {
}
package com.example.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

四、Wrapper 查詢構造器詳解

MyBatis-Plus 提供了強大的查詢構造器 QueryWrapperUpdateWrapper,可以鏈式構建 SQL 條件。

示例:使用 QueryWrapper 查詢用戶

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;public List<User> getUsersByNameAndAge(String name, int minAge) {return userMapper.selectList(new QueryWrapper<User>().like("name", name) // LIKE '%name%'.ge("age", minAge)); // age >= minAge
}

更多常用方法:

方法說明
eq(column, value)等于
ne(column, value)不等于
gt(column, value)大于
ge(column, value)大于等于
lt(column, value)小于
le(column, value)小于等于
like(column, value)LIKE
in(column, collection)IN 查詢
between(column, val1, val2)BETWEEN 查詢
orderByAsc(column) / orderByDesc(column)排序

LambdaQueryWrapper(推薦)

避免字符串硬編碼錯誤,推薦使用 LambdaQueryWrapper

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getName, "Tom").ge(User::getAge, 18));

五、分頁插件配置

1. 配置分頁插件

在配置類中啟用分頁功能:

package com.example.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

2. 使用分頁查詢

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public Page<User> getUsersByPage(int pageNum, int pageSize) {return userMapper.selectPage(new Page<>(pageNum, pageSize), null);
}

你也可以結合 Wrapper:

Page<User> page = userMapper.selectPage(new Page<>(1, 10),new LambdaQueryWrapper<User>().ge(User::getAge, 20)
);

六、多表關聯查詢(以一對一為例)

1. 新建 Address 表及實體類

CREATE TABLE address (id BIGINT PRIMARY KEY AUTO_INCREMENT,user_id BIGINT,detail VARCHAR(200)
);
package com.example.entity;import com.baomidou.mybatisplus.annotation.*;@Data
@TableName("address")
public class Address {@TableId(type = IdType.AUTO)private Long id;private Long userId;private String detail;
}

2. 修改 User 類(增加關聯字段)

package com.example.entity;import lombok.Data;@Data
public class UserVO extends User {private Address address;
}

3. 自定義 SQL 查詢(XML 方式)

<!-- UserMapper.xml -->
<select id="selectUserWithAddress" resultType="com.example.entity.UserVO">SELECT u.*, a.detail AS address_detailFROM user uLEFT JOIN address a ON u.id = a.user_idWHERE u.id = #{id}
</select>

4. Mapper 接口中聲明方法

UserVO selectUserWithAddress(Long id);

七、總結

通過本文,你應該已經掌握了:

  • 如何在 Spring Boot 中集成 MyBatis-Plus;
  • 使用 @TableName@TableId@TableField 注解進行 ORM 映射;
  • 使用 Wrapper 構建靈活查詢條件;
  • 使用分頁插件進行分頁;
  • 多表關聯查詢的基本方式。

MyBatis-Plus 是一個非常實用的 MyBatis 擴展庫,能夠顯著提升開發效率,建議結合官方文檔進一步深入學習其高級特性,例如自動填充、樂觀鎖、邏輯刪除、多租戶等。


參考資料

  • MyBatis-Plus 官方文檔
  • Spring Boot 官方文檔

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

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

相關文章

AI生成內容泛濫時代:從“袋鼠登機“視頻看AI鑒偽與游戲智能的未來

近年來&#xff0c;AI生成內容的質量突飛猛進&#xff0c;從文本到圖像再到視頻&#xff0c;幾乎達到了以假亂真的程度。近期一段"人類在飛機上吵架看呆袋鼠"的視頻在社交網絡瘋傳&#xff0c;獲得數千萬次觀看后&#xff0c;才被證實是AI生成內容&#xff0c;這一事…

為什么在linux中不能直接使用pip進行安裝

您好&#xff0c;這是一個非常深刻且關鍵的問題&#xff0c;觸及了 Linux 系統管理與 Python 開發實踐的核心原則。理解了這一點&#xff0c;您就真正開始像一位經驗豐富的開發者那樣思考了。 簡單來說&#xff0c;答案是&#xff1a;為了保護操作系統自身的穩定和完整性。 讓…

IDEA相關配置記錄

IDEA相關配置記錄 參考鏈接&#xff1a; 參考鏈接&#xff1a; 1、安裝jdk D:\Program Files\Java\jdk-21 https://blog.csdn.net/2302_81410974/article/details/142031416 2、安裝maven D:\Java\workspace-maven\apache-maven-3.9.10 . ├── LICENSE ├── NOTICE ├──…

FastGPT私有化部署完整指南

&#x1f680; FastGPT 私有化部署完整指南 &#x1f4cb; 環境要求 硬件要求 最低配置:CPU: 4核內存: 8GB存儲: 50GB網絡: 穩定互聯網連接推薦配置:CPU: 8核內存: 16GB存儲: 100GB SSD網絡: 10Mbps帶寬軟件環境 必需軟件:- Docker: > 20.10.0- Docker Compose: > 2.…

系統架構設計師論文分享-基于架構的軟件設計方法及應用

我的軟考歷程 摘要 2023年2月&#xff0c;我所在的公司做了開發紗線MES系統的決定&#xff0c;該系統為國內紗線工廠提供SAAS服務&#xff0c;旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師&#xff0c;全面掌管該項目的架構設計工作。本文將結…

團結引擎發布純鴻蒙應用

大家好&#xff0c;我是阿趙。 ??這里嘗試一下用團結引擎發布純鴻蒙系統的應用。 一、 安裝鴻蒙系統發布需要的組件 在團結引擎的Hub里面找到Add modules: 然后找到OpenHarmony的支持選項&#xff0c;由于我已經安裝過了&#xff0c;所以會顯示Installed&#xff0c;如果沒…

C++基礎(FreeRDP編譯)

安裝 先安裝openssl 保姆級OpenSSL下載及安裝教程,OpenSSL下載及安裝教程-CSDN博客 vcpkg integrate install 安裝 vcpkg install zlib vcpkg install ffmpeg:x64-windows 編譯指令 PS D:\freerdp\FreeRDP\build> cmake .. -G "Visual Studio 17 2022" -A x…

用celery作為信息中間件

要在 Django 的 settings.py 中設置 Redis 作為 Celery 的 broker 和(可選)backend,你需要添加如下配置: 安裝依賴(如未安裝): pip install celery redis在 settings.py 中添加 Celery 配置(推薦放在文件底部): # Celery 配置 CELERY_BROKER_URL = redis://127.0.0.1…

Postman介紹及使用

Postman 是一個強大的 API 開發、測試和文檔化工具&#xff0c;廣泛用于開發者、測試人員和 API 設計者。以下是 Postman 的核心使用指南&#xff0c;涵蓋基礎操作到進階功能&#xff1a; 一、基礎使用 安裝與界面 下載&#xff1a;官網下載&#xff08;支持 Windows/macOS/Lin…

Android14音頻子系統-ASoC-ALSA之DAPM電源管理子系統

文章目錄 概述1&#xff09;codec對象-WM89602&#xff09;ALSA下的kcontrol的構造與使用3&#xff09;ASOC-ALSA下的kcontrol構造與使用1、通用寄存器對象 - kcontrol2、DAPM下的寄存器對象-widget3、如何構造widget&#xff1f;4、抽象對象widget、route與path1&#xff09;r…

如何修改anaconda 創建新虛擬環境的路徑(默認是C:\.conda\envs)

參考文章&#xff1a; 如何修改anaconda 創建新虛擬環境的路徑(默認是C&#xff1a;\.conda\envs)_anaconda創建環境怎么改路徑-CSDN博客

前綴和計算

前綴和 輸入一個長度為n的整數序列。接下來再輸入m個詢問&#xff0c;每個詢問輸入一對l, r。對于每個詢問&#xff0c;輸出原序列中從第l個數到第r個數的和。 所用方法和基本原理 前綴和數組的構建&#xff1a; 首先定義了一個方法getPrefixSum來構建前綴和數組。前綴和數組…

BP神經網絡支持向量機實現風機故障診斷

BP神經網絡&#xff0c;支持向量機等用于風機故障診斷 BP神經網絡&#xff0c;支持向量機等用于風機故障診斷/成功算法/bp20111202_FDD.m , 1580 BP神經網絡&#xff0c;支持向量機等用于風機故障診斷/成功算法/BP_FDD.m , 6044 BP神經網絡&#xff0c;支持向量機等用于風機故…

c++ std::initializer_list

測試代碼&#xff1a; int sum(std::initializer_list<int> params) { // 傳遞若干同類型參數int total 0;for (auto num : params) {total num;}return total; }void testInitializer_list() {// 自定義類支持列表初始化class Demo {public:Demo(std::initializer_li…

Python 數據分析與機器學習入門 (五):Matplotlib 數據可視化基礎

引言&#xff1a;為何可視化至關重要&#xff1f; 俗話說&#xff0c;“一圖勝千言”。在數據分析領域&#xff0c;這句話尤其正確。原始的數據表格和統計摘要雖然精確&#xff0c;但往往難以揭示數據中隱藏的模式、趨勢、異常值和關系。數據可視化通過將數據轉換成圖形&#…

AI基礎1--線性代數(TODO)

1 前言 關于矩陣的運算&#xff0c;其實之前寫過一篇&#xff1a;算法矩陣提速原理_矩陣分塊計算速度會更快嘛-CSDN博客 還是那句話&#xff0c;計算機懂個毛的高等數學。只是矩陣運算的并行性和結構化特點與 SIMD/GPU 的執行模型非常一致。在實際硬件實現中&#xff0c;許多矩…

如何讓宿主機完全看不到Wi-Fi?虛擬機獨立聯網隱匿上網實戰!

“如何讓宿主機完全看不到Wi-Fi&#xff1f;虛擬機獨立聯網隱匿上網實戰&#xff01;” 一、前言 在某些特定環境&#xff08;如企業辦公或信息安全測試&#xff09;中&#xff0c;我們可能有這樣的需求&#xff1a; 讓宿主機無法識別或使用某個USB網絡設備&#xff0c;但虛擬…

Excel基礎操作知識筆記

? 學習視頻鏈接&#xff1a; ??????【公開課】Excel基礎大全&#xff08;1-66集&#xff09;【超高清版】_嗶哩嗶哩_bilibili 深圳則秀教育官方賬號的個人空間-深圳則秀教育官方賬號個人主頁-嗶哩嗶哩視頻 Excel技巧零基礎入門公開課小白&#xff08;Excel表格制作|Exc…

【2025/06/30】GitHub 今日熱門項目

GitHub 今日熱門項目 &#x1f680; 每日精選優質開源項目 | 發現優質開源項目&#xff0c;跟上技術發展趨勢 &#x1f4cb; 報告概覽 &#x1f4ca; 統計項&#x1f4c8; 數值&#x1f4dd; 說明&#x1f4c5; 報告日期2025-06-30 (周一)GitHub Trending 每日快照&#x1f55…

Oracle 進階語法實戰:從多維分析到數據清洗的深度應用?(第四課)

在《Oracle 樹形統計再進階》(第三課)基礎上&#xff0c;我們跳出傳統 SQL 聚合框架&#xff0c;探索Oracle 特有的高級語法特性&#xff0c;包括多維分析神器MODEL子句、數據清洗利器正則表達式、PL/SQL 存儲過程優化&#xff0c;以及基于執行計劃的查詢調優技巧。這些技術能解…