【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

宇树开源新里程碑:UnifoLM-VLA-0模型让机器人走进生活

宇树机器人各种炫酷的表演我们都见过,尤其是同王力宏跳舞那场演唱会,真的很震撼。 刚刚,宇树科技开源的UnifoLM-VLA-0模型,则让机器人开始走进生活。 UnifoLM-VLA-0通过独特的动作分块预测与动力学约束技术,让视觉-语言模型(VLMs)从单纯的图文理解进化为具备物理常识的具身大脑,在仅使用340小时真机数据的情况下实现了通用操作的极致泛化。 转载 , 宇树开源新里程碑:UnifoLM-VLA-0模型让机器人走进生活 它利用Qwen2.5-VL作为基座,通过极其高效的数据策略和创新的动力学预测架构,解决了传统模型手眼不协调的顽疾,并在宇树G1人形机器人上实现了惊人的多任务通用能力。 从图文理解到具身大脑的进化 视觉-语言模型虽然能够精准地识别出一张图片里有一个红色的苹果,也能写出关于苹果的诗歌,但它们缺乏物理常识。 它们不知道这个苹果有多重,不知道捏起它需要多大的力气,更不知道如果手滑了苹果会以什么轨迹掉落。 UnifoLM-VLA-0基于开源的Qwen2.5-VL-7B,使用跨机器人和通用场景的多任务数据集进行持续的预训练,让模型继承

轻小说机翻机器人:5分钟打造你的日语小说翻译神器

轻小说机翻机器人:5分钟打造你的日语小说翻译神器 【免费下载链接】auto-novel轻小说机翻网站,支持网络小说/文库小说/本地小说 项目地址: https://gitcode.com/GitHub_Trending/au/auto-novel 轻小说机翻机器人是一款开源的日语小说翻译工具,支持网络小说、文库小说和本地小说的全自动翻译处理。作为专业的轻小说翻译解决方案,它能自动抓取日本主流平台内容,提供多引擎翻译服务,并构建完整的阅读生态,让日语阅读不再受语言障碍困扰。 🚀 核心价值:为什么选择轻小说机翻机器人? 全自动小说采集系统 内置对Kakuyomu、小説家になろう等6大日本小说平台的支持,只需输入小说名称或URL,系统即可智能抓取内容并完成翻译。通过crawler/src/lib/domain/目录下的平台适配代码(如kakuyomu.ts、syosetu.ts),实现对不同网站结构的精准解析。 多引擎翻译切换 集成百度翻译、有道翻译、OpenAI类API、Sakura等多种翻译器,满足从快速浏览到深度阅读的不同需求。翻译引擎实现代码位于web/src/do

【Web APIs】JavaScript touch 触摸事件 ① ( touchstart 触摸开始事件 | touchmove 触摸移动事件 | touchend 触摸结束事件 )

【Web APIs】JavaScript touch 触摸事件 ① ( touchstart 触摸开始事件 | touchmove 触摸移动事件 | touchend 触摸结束事件 )

文章目录 * 一、JavaScript touch 触摸事件 * 1、 touchstart 触摸开始事件 * 2、touchmove 触摸移动事件 * 3、touchend 触摸结束事件 * 二、代码示例 - touch 触摸事件 * 1、代码示例 * 2、执行结果 一、JavaScript touch 触摸事件 touchstart、touchmove、touchend 事件是 JavaScript 专为支持 触摸操作 的 移动设备( 手机、平板等 ) 设计的核心触摸事件, 用于 监听用户的触摸行为 , 构成了 完整的 触摸生命周期 ; 1、 touchstart 触摸开始事件 touchstart 触摸开始事件 : * 核心定义

Qwen3-VL-WEBUI移动端集成:App调用API部署教程

Qwen3-VL-WEBUI移动端集成:App调用API部署教程 1. 引言 1.1 业务场景描述 随着多模态大模型在移动端应用的不断拓展,如何将强大的视觉-语言模型(VLM)能力无缝集成到移动 App 中,成为智能客服、图像理解、自动化操作等场景的关键技术挑战。传统方案往往依赖云端纯文本推理,难以满足对图像、视频内容实时理解与交互的需求。 Qwen3-VL-WEBUI 的出现为这一问题提供了高效解决方案。它不仅集成了阿里最新开源的 Qwen3-VL-4B-Instruct 模型,还内置了完整的 Web API 接口服务,支持通过 HTTP 调用实现图文输入、结构化输出,非常适合移动端 App 快速接入。 1.2 痛点分析 目前移动端集成 VLM 面临三大核心痛点: * 部署复杂:多数模型需自行搭建推理环境,配置 CUDA、PyTorch、Transformers 等组件,门槛高。 * 接口缺失: