在 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;以及基于执行计划的查询调优技巧。这些技术能解…