【Web 应用开发实战】SpringBoot 整合 MyBatis-Plus:从零到一快速实现数据库 CRUD

【Web 应用开发实战】SpringBoot 整合 MyBatis-Plus:从零到一快速实现数据库 CRUD

前言

在 Web 应用项目开发课程的学习中,持久层数据操作是核心环节之一。传统的 MyBatis 需要编写大量的 XML 映射文件和 SQL 语句,效率较低;而 MyBatis-Plus(简称 MP)作为 MyBatis 的增强工具,在保留 MyBatis 原有特性的基础上,实现了 “无 SQL” 式的 CRUD 操作,极大简化了数据库开发流程。本文将结合 Web 开发课程的实战场景,从开发环境配置SpringBoot 项目搭建MyBatis-Plus 整合实战 CRUD,完整讲解如何快速实现 SpringBoot+MyBatis-Plus 的数据库操作,内容原创且图文并茂,适合课程学习和项目实践。

一、开发环境配置(基础准备)

在开始项目开发前,需先配置好核心开发环境,本次实战使用的环境版本如下(课程推荐稳定版本):

  • JDK:1.8(Java 8,Web 开发主流版本)
  • Maven:3.8.6(项目构建和依赖管理工具)
  • IDEA:2022.3(IntelliJ IDEA Ultimate,Java 开发首选 IDE)
  • MySQL:8.0.32(关系型数据库)

1.1 JDK 安装与环境变量配置

步骤 1:下载 JDK

进入 Oracle 官网(或国内镜像站)下载 JDK 1.8 安装包,根据系统选择 Windows/x64 版本,双击安装(建议安装路径:D:\Java\jdk1.8.0_381,避免中文和空格)。

步骤 2:配置环境变量

右键 “此电脑”→“属性”→“高级系统设置”→“环境变量”,进行如下配置:

  • 新建系统变量:JAVA_HOME,值为 JDK 安装路径(如D:\Java\jdk1.8.0_381);
  • 编辑系统变量Path,新增:%JAVA_HOME%\bin%JAVA_HOME%\jre\bin
  • 验证:打开 CMD,输入java -version,若显示 JDK 1.8 版本信息,说明配置成功。

1.2 Maven 配置(IDEA 集成)

步骤 1:下载并解压 Maven

下载 Maven 3.8.6 压缩包,解压到指定路径(如D:\apache-maven-3.8.6)。

步骤 2:配置 Maven 镜像(加速依赖下载)

修改 Maven 的conf/settings.xml文件:

  • 配置本地仓库路径:<localRepository>D:\maven-repo</localRepository>(自定义本地仓库位置);
  • 配置阿里云镜像(替换默认中央仓库):

xml

<mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> 
步骤 3:IDEA 中配置 Maven

打开 IDEA→“File”→“Settings”→“Build, Execution, Deployment”→“Build Tools”→“Maven”:

  • Maven home path:选择解压后的 Maven 路径;
  • User settings file:选择修改后的settings.xml
  • Local repository:选择配置的本地仓库路径。

二、快速搭建 SpringBoot 项目(核心步骤)

使用 IDEA 的 Spring Initializr 快速搭建 SpringBoot 项目,版本选择 2.7.12(课程推荐的稳定版本)。

2.1 创建 SpringBoot 项目

步骤 1:新建项目

打开 IDEA→“New Project”→选择 “Spring Initializr”→配置项目信息:

  • Name:springboot-mp-demo(项目名);
  • Type:Maven Project;
  • Language:Java;
  • Group:com.example
  • Artifact:springboot-mp-demo
  • Java Version:8;
步骤 2:选择核心依赖

在 “Dependencies” 页面,勾选以下依赖(Web 开发核心):

  • Spring Web(Web 应用基础);
  • MySQL Driver(MySQL 数据库驱动);
  • Lombok(简化实体类编写);

点击 “Create” 完成项目创建,IDEA 会自动下载依赖并初始化项目结构。

2.2 项目结构说明(课程重点)

搭建完成后的项目核心结构如下:

plaintext

springboot-mp-demo ├── src/main/java/com/example/springbootmpdemo │ ├── SpringbootMpDemoApplication.java // 项目启动类 │ ├── entity // 实体类包 │ ├── mapper // Mapper接口包 │ └── service // 业务层包 └── src/main/resources ├── application.yml // 核心配置文件 └── static/templates // 静态资源/视图层(本次暂不涉及) 

三、整合 MyBatis-Plus(核心实战)

3.1 引入 MyBatis-Plus 依赖

修改pom.xml文件,添加 MyBatis-Plus 的核心依赖(注意版本和 SpringBoot 匹配):

xml

<!-- MyBatis-Plus核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> 

添加完成后,点击 IDEA 的 “Reload All Maven Projects” 刷新依赖。

3.2 配置数据库连接与 MyBatis-Plus

修改src/main/resources/application.yml文件,配置数据库连接和 MyBatis-Plus 核心参数:

yaml

# 服务器配置 server: port: 8080 # 项目启动端口 # 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mp_demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root # 你的MySQL用户名 password: root # 你的MySQL密码 # MyBatis-Plus配置 mybatis-plus: configuration: map-underscore-to-camel-case: true # 开启下划线转驼峰(数据库字段user_name→实体类userName) log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志(便于调试) mapper-locations: classpath:mapper/*.xml # Mapper XML文件路径(本次暂不用) type-aliases-package: com.example.springbootmpdemo.entity # 实体类别名包 

注意:需先在 MySQL 中创建数据库mp_demo(执行CREATE DATABASE mp_demo;),无需提前建表(后续用 MP 自动生成)。

3.3 编写实体类(Entity)

以课程中常见的 “用户表” 为例,在entity包下创建User.java

java

运行

package com.example.springbootmpdemo.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** * 用户实体类(对应数据库user表) */ @Data // Lombok注解,自动生成get/set/toString等方法 @TableName("user") // 指定数据库表名 public class User { /** * 主键ID,自增 */ @TableId(type = IdType.AUTO) private Long id; /** * 用户名 */ private String userName; /** * 密码 */ private String password; /** * 年龄 */ private Integer age; /** * 创建时间 */ private LocalDateTime createTime; } 

说明@Data注解由 Lombok 提供,可省去手动编写 get/set 方法;@TableName指定实体类对应的数据表名;@TableId指定主键策略(AUTO 为自增)。

3.4 编写 Mapper 接口(核心:无需写 SQL)

mapper包下创建UserMapper.java,继承 MyBatis-Plus 的BaseMapper

java

运行

package com.example.springbootmpdemo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.springbootmpdemo.entity.User; import org.apache.ibatis.annotations.Mapper; /** * 用户Mapper接口(继承BaseMapper即可获得CRUD方法) */ @Mapper // 标识为MyBatis的Mapper接口 public interface UserMapper extends BaseMapper<User> { // 无需编写任何方法,BaseMapper已封装所有基础CRUD操作 } 

核心亮点:继承BaseMapper<User>后,MP 会自动为User实体生成对应的 CRUD SQL,无需编写 XML 或注解 SQL,这是 MP 最核心的简化点。

3.5 启动类添加 Mapper 扫描

修改项目启动类SpringbootMpDemoApplication.java,添加@MapperScan注解,扫描 Mapper 接口所在包:

java

运行

package com.example.springbootmpdemo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 项目启动类 */ @SpringBootApplication @MapperScan("com.example.springbootmpdemo.mapper") // 扫描Mapper接口包 public class SpringbootMpDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMpDemoApplication.class, args); } } 

四、实战:MyBatis-Plus 实现 CRUD 操作

接下来通过 IDEA 的测试类,验证 MP 的 CRUD 功能,这也是 Web 开发课程中最核心的实战环节。

4.1 创建测试类

src/test/java/com/example/springbootmpdemo下,创建UserMapperTest.java

java

运行

package com.example.springbootmpdemo; import com.example.springbootmpdemo.entity.User; import com.example.springbootmpdemo.mapper.UserMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.time.LocalDateTime; import java.util.List; /** * UserMapper测试类 */ @SpringBootTest // 标识为SpringBoot测试类 public class UserMapperTest { // 自动注入UserMapper @Autowired private UserMapper userMapper; /** * 测试新增用户(Create) */ @Test public void testInsert() { User user = new User(); user.setUserName("张三"); user.setPassword("123456"); user.setAge(20); user.setCreateTime(LocalDateTime.now()); // 调用MP的insert方法,返回受影响行数 int rows = userMapper.insert(user); System.out.println("新增成功,受影响行数:" + rows); System.out.println("新增用户的ID:" + user.getId()); // 自增ID会自动回填 } /** * 测试查询所有用户(Read) */ @Test public void testSelectList() { // selectList(null)表示查询所有数据(无条件) List<User> userList = userMapper.selectList(null); // 遍历输出 userList.forEach(user -> System.out.println(user)); } /** * 测试更新用户(Update) */ @Test public void testUpdate() { User user = new User(); user.setId(1L); // 要更新的用户ID user.setAge(22); // 只更新年龄 // 调用MP的updateById方法,根据ID更新 int rows = userMapper.updateById(user); System.out.println("更新成功,受影响行数:" + rows); } /** * 测试删除用户(Delete) */ @Test public void testDelete() { // 调用MP的deleteById方法,根据ID删除 int rows = userMapper.deleteById(1L); System.out.println("删除成功,受影响行数:" + rows); } } 

4.2 运行测试并验证结果

步骤 1:运行新增测试(testInsert)
  • 查看 MySQL 的user表,会新增一条用户数据,ID 自动自增。

执行testInsert方法,控制台会打印 MP 自动生成的 INSERT SQL:sql

INSERT INTO user ( user_name, password, age, create_time ) VALUES ( ?, ?, ?, ? ) 
步骤 2:运行查询 / 更新 / 删除测试

依次执行testSelectListtestUpdatetestDelete方法,控制台会打印对应的 SQL 和执行结果,验证所有 CRUD 操作均可正常执行。

五、进阶:MyBatis-Plus 分页插件(课程拓展)

在 Web 项目中,分页查询是高频需求,MP 提供了开箱即用的分页插件,配置和使用都非常简单。

5.1 配置分页插件

在项目中创建config包,新增MyBatisPlusConfig.java

java

运行

package com.example.springbootmpdemo.config; import com.baomidou.mybatisplus.annotation.DbType; 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; /** * MyBatis-Plus配置类 */ @Configuration public class MyBatisPlusConfig { /** * 配置分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加MySQL分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } 

5.2 测试分页查询

在测试类中新增分页测试方法:

java

运行

/** * 测试分页查询 */ @Test public void testPage() { // 构建分页条件:第1页,每页显示2条 Page<User> page = new Page<>(1, 2); // 执行分页查询 userMapper.selectPage(page, null); // 获取分页结果 System.out.println("总记录数:" + page.getTotal()); System.out.println("总页数:" + page.getPages()); System.out.println("当前页数据:"); page.getRecords().forEach(user -> System.out.println(user)); } 

运行该方法,控制台会打印分页 SQL(包含 LIMIT),并输出分页结果,验证分页功能生效。

六、课程总结与拓展

6.1 核心总结

  1. SpringBoot 整合 MyBatis-Plus 的核心是引入依赖 + 配置数据库 + 继承 BaseMapper,无需编写基础 CRUD 的 SQL;
  2. Lombok 的@Data注解可大幅简化实体类编写,MP 的@TableName@TableId等注解用于关联数据库表;
  3. MP 的分页插件只需简单配置,即可实现开箱即用的分页功能,提升开发效率。

6.2 课程拓展(Web 项目实战)

在实际 Web 应用开发中,可基于本次整合的基础,进一步实现:

  • 编写 Service 层封装业务逻辑;
  • 编写 Controller 层提供接口,结合 Postman 测试;
  • 整合 Thymeleaf 实现视图层展示用户数据;
  • 添加全局异常处理、参数校验等功能,完善项目。

结尾

本文结合 Web 应用项目开发课程的实战需求,从环境配置到项目搭建,再到 MyBatis-Plus 的整合与实战,完整讲解了 SpringBoot+MyBatis-Plus 的核心使用方式。相比于传统 MyBatis,MP 极大降低了持久层开发的工作量,非常适合课程项目和中小型 Web 应用开发。

Read more

AIGC(生成式AI)试用 45 -- DocsGPT 与 Python开发 1

一切从python调用本地DocsGPT完成python开发开始。 遗留问题:如何验证AI开发提交的结果? * 提问 1: 使用python+Tkinter进行GUI程序编码 1. 界面分为左右两部分     - 左侧为python代码编辑区:       左上部为代码多行输入框,嵌入python idle,浅灰色底色;       左下部为 Run 按钮     - 右侧为GPT调用区:       右上部为tab,名称 Question,嵌入多行文本,输入提问问题;       中部为Show Answer按钮,海蓝色;       下部为2个tab:tab1,名称 Answer,嵌入多行文本,显示GPT处理结果;                                tab2,名称History,显示提问历史,answer + question,数据来自名为pyai的sqlite的数据库  2. 优化界面  3. 优化代码 * DeepSeek 回复 1: - 1 次调用界面

本地部署 Kimi K2 全指南(llama.cpp、vLLM、Docker 三法)

本地部署 Kimi K2 全指南(llama.cpp、vLLM、Docker 三法)

Kimi K2 是 Moonshot AI 于2025年7月11日发布的高性能多专家语言模型(MoE),支持最大 128K 上下文,激活参数规模为 32B,具备极强的推理、代码生成与多轮对话能力。自从其权重以多种格式开源以来,许多开发者希望将其部署在本地,以获得更高的私密性和灵活性。 本文将详细介绍三种主流本地部署路径,并提供完整的配置步骤和使用建议。 📦 准备工作(通用部分) 在进行部署前,请准备如下环境与资源: ✅ 最低硬件配置建议: 项目要求存储空间≥ 250 GB(用于量化模型,若使用 FP8 请预留 1 TB)内存≥ 128 GB RAM(越大越流畅)GPU≥ 24 GB 显存,推荐多卡(如 2×A100、H100)操作系统Linux(Ubuntu 推荐)

Copilot vs Claude Code终极对决哪个会更好用呢?

Copilot vs Claude Code终极对决哪个会更好用呢?

📊 核心差异:一句话概括 * GitHub Copilot:你的智能代码补全器 * Claude Code:你的全栈AI开发伙伴 🎯 一、产品定位对比 GitHub Copilot:专注代码补全 <TEXT> 定位:AI结对编程助手 核心理念:让你写代码更快 核心功能:基于上下文的代码建议和补全 收费模式:个人$10/月,企业$19/用户/月 Claude Code:全栈开发加速器 <TEXT> 定位:AI驱动的开发平台 核心理念:提升整个开发流程效率 核心功能:代码生成+架构设计+调试+部署 收费模式:按token计费,灵活弹性 ⚡ 二、核心技术对比

dify平台集成OCR:低代码+AI模型打造智能表单识别系统

dify平台集成OCR:低代码+AI模型打造智能表单识别系统 📖 项目背景与技术选型动因 在企业数字化转型过程中,大量纸质表单、发票、合同等非结构化文档需要转化为可处理的结构化数据。传统人工录入方式效率低、成本高、易出错,而通用OCR服务往往对中文支持不完善,尤其在复杂背景或手写体场景下识别准确率骤降。 为此,我们基于 dify 低代码平台,集成了一套轻量级但高精度的 OCR 文字识别系统。该系统采用经典的 CRNN(Convolutional Recurrent Neural Network)模型架构,专为中英文混合文本识别优化,在无GPU依赖的前提下实现 <1秒 的平均响应时间,真正做到了“开箱即用”的工业级OCR能力。 本方案的核心价值在于: - 低代码集成:通过dify平台快速接入AI能力,无需深度开发即可构建智能表单应用 - 高识别精度:相比传统轻量模型,CRNN在中文长文本、模糊图像、倾斜排版等复杂场景下表现更优 - 双模输出支持:同时提供可视化Web界面和标准REST API,