发布时间:2026/7/8 20:01:11
SpringBoot系列07:整合MyBatis-Plus实战,CRUD、分页、条件查询、逻辑删除全套代码
文章目录一、前言为什么现在开发全部用 MyBatis-Plus二、环境版本说明避坑关键三、项目整合步骤从零搭建3.1 引入核心Maven依赖3.2 全局配置文件application.yml3.3 初始化测试数据库表四、核心配置类生产必备4.1 分页插件配置必须配置否则分页total为04.2 自动时间填充配置创建/更新时间自动赋值五、实体类、Mapper、Service层完整代码5.1 User实体类逻辑删除自动时间适配5.2 Mapper层继承BaseMapper拥有全部单表CRUD5.3 Service层继承IServiceServiceImplUserService 接口UserServiceImpl 实现类六、Controller全套实战接口CRUD分页条件查询逻辑删除七、核心功能深度解析面试生产重点7.1 逻辑删除原理7.2 分页核心原理7.3 Lambda条件构造器优势八、高频报错与生产避坑指南高分核心8.1 分页total为08.2 逻辑删除后数据还能查到8.3 创建时间不自动填充8.4 SpringBoot3 启动报错类找不到九、全文总结 专栏SpringBoot实战进阶系列 文章评级96分零基础手把手全套可运行源码生产最佳实践避坑完整 适用人群SpringBoot初学者、CRUD开发、后端入门、毕业设计、业务功能开发 核心收获读完直接落地业务从零完成SpringBoot MyBatis-Plus 最新版整合杜绝旧版本报错掌握新增/删除/修改/查询 全套CRUD无SQL开发精通分页插件、多条件模糊查询、排序、分页参数封装吃透逻辑删除、自动填充创建/更新时间生产必备功能掌握 MP 常见报错、配置误区、生产规范告别百度复制烂代码️ 文章标签#SpringBoot #MyBatisPlus #CRUD #分页查询 #逻辑删除 #条件查询 #后端开发 #数据库操作一、前言为什么现在开发全部用 MyBatis-Plus传统 MyBatis 开发最大痛点简单CRUD也要写XML、重复代码多、分页繁琐、字段更新冗余开发效率极低。MyBatis-Plus简称MP是 MyBatis 的增强工具只增强不修改完全兼容原生 MyBatis核心优势零SQL实现基础CRUD无需手写任何增删改查语句内置条件构造器轻松实现模糊查询、范围查询、排序、去重内置分页插件一行代码实现分页、总条数、总页数全局逻辑删除、自动时间填充、主键策略贴合生产环境支持代码生成器一键生成 Entity、Mapper、Service、Controller本文基于SpringBoot3 MyBatis-Plus 最新稳定版从零搭建全程手把手所有代码直接复制可运行适合所有业务系统开发。二、环境版本说明避坑关键生产稳定适配版本杜绝版本冲突报错SpringBoot3.2.x / 3.3.xMyBatis-Plus3.5.5适配SpringBoot3JDK17数据库MySQL 8.0重点避坑SpringBoot3 必须使用 MP3.5.3 版本低版本会出现类找不到、方法过期、注入失败等问题。三、项目整合步骤从零搭建3.1 引入核心Maven依赖无需引入原生 mybatis 依赖MP 已内置避免冲突。!-- MyBatis-Plus 最新依赖 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.5/version/dependency!-- MySQL驱动 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- Lombok 简化实体类代码 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency3.2 全局配置文件application.yml包含数据库连接、MP全局配置、逻辑删除、驼峰命名、日志打印。spring:# 数据库配置datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/mp_demo?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiallowMultiQueriestrueusername:rootpassword:你的数据库密码# MyBatis-Plus全局配置mybatis-plus:# 映射文件路径mapper-locations:classpath:mapper/*.xml# 实体类驼峰命名自动映射configuration:map-underscore-to-camel-case:true# 开启SQL日志打印开发环境必备log-impl:org.apache.ibatis.logging.stdout.StdOutImpl# 全局策略配置global-config:db-config:# 主键自增策略id-type:auto# 逻辑删除配置0未删除 1已删除logic-delete-field:deletedlogic-delete-value:1logic-not-delete-value:03.3 初始化测试数据库表创建测试用户表包含逻辑删除、创建时间、更新时间通用字段。CREATEDATABASEIFNOTEXISTSmp_demoDEFAULTCHARACTERSETutf8mb4;USEmp_demo;CREATETABLEuser(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT主键ID,nameVARCHAR(30)NOTNULLCOMMENT用户名,ageINTDEFAULT0COMMENT年龄,emailVARCHAR(50)COMMENT邮箱,deletedTINYINTDEFAULT0COMMENT逻辑删除 0-未删除 1-已删除,create_timeDATETIMECOMMENT创建时间,update_timeDATETIMECOMMENT更新时间)ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT用户表;四、核心配置类生产必备4.1 分页插件配置必须配置否则分页total为0很多新手分页查询总条数为0根本原因未注册分页插件。importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;ConfigurationpublicclassMybatisPlusConfig{/** * 注册分页插件 */BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();// 指定数据库类型为MySQLinterceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));returninterceptor;}}4.2 自动时间填充配置创建/更新时间自动赋值生产系统必备无需手动set时间自动填充。importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;importorg.apache.ibatis.reflection.MetaObject;importorg.springframework.stereotype.Component;importjava.time.LocalDateTime;ComponentpublicclassMyMetaObjectHandlerimplementsMetaObjectHandler{/** * 新增自动填充 */OverridepublicvoidinsertFill(MetaObjectmetaObject){this.strictInsertFill(metaObject,createTime,LocalDateTime::now,LocalDateTime.class);this.strictInsertFill(metaObject,updateTime,LocalDateTime::now,LocalDateTime.class);this.strictInsertFill(metaObject,deleted,()-0,Integer.class);}/** * 更新自动填充 */OverridepublicvoidupdateFill(MetaObjectmetaObject){this.strictUpdateFill(metaObject,updateTime,LocalDateTime::now,LocalDateTime.class);}}五、实体类、Mapper、Service层完整代码5.1 User实体类逻辑删除自动时间适配importcom.baomidou.mybatisplus.annotation.*;importlombok.Data;importjava.time.LocalDateTime;DataTableName(user)publicclassUser{/** * 主键自增 */TableId(typeIdType.AUTO)privateLongid;/** * 用户名 */privateStringname;/** * 年龄 */privateIntegerage;/** * 邮箱 */privateStringemail;/** * 逻辑删除字段 */TableLogicprivateIntegerdeleted;/** * 创建时间新增自动填充 */TableField(fillFieldFill.INSERT)privateLocalDateTimecreateTime;/** * 更新时间新增更新都填充 */TableField(fillFieldFill.INSERT_UPDATE)privateLocalDateTimeupdateTime;}5.2 Mapper层继承BaseMapper拥有全部单表CRUDimportcom.baomidou.mybatisplus.core.mapper.BaseMapper;importorg.apache.ibatis.annotations.Mapper;MapperpublicinterfaceUserMapperextendsBaseMapperUser{// 无需手写任何CRUD方法全部继承}5.3 Service层继承IServiceServiceImplUserService 接口importcom.baomidou.mybatisplus.extension.service.IService;publicinterfaceUserServiceextendsIServiceUser{}UserServiceImpl 实现类importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importorg.springframework.stereotype.Service;ServicepublicclassUserServiceImplextendsServiceImplUserMapper,UserimplementsUserService{}六、Controller全套实战接口CRUD分页条件查询逻辑删除全部RESTful 风格接口可直接用于前端对接、测试、业务开发。importcom.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;importcom.baomidou.mybatisplus.core.metadata.IPage;importcom.baomidou.mybatisplus.extension.plugins.pagination.Page;importlombok.RequiredArgsConstructor;importorg.springframework.util.StringUtils;importorg.springframework.web.bind.annotation.*;importjava.util.List;RestControllerRequestMapping(/user)RequiredArgsConstructorpublicclassUserController{privatefinalUserServiceuserService;// 新增 PostMappingpublicBooleanaddUser(RequestBodyUseruser){// 自动填充创建时间、更新时间、默认未删除returnuserService.save(user);}// 根据ID查询 GetMapping(/{id})publicUsergetUserById(PathVariableLongid){// 自动过滤逻辑删除数据returnuserService.getById(id);}// 查询全部 GetMapping(/list)publicListUserlistUser(){returnuserService.list();}// 条件查询模糊、范围、排序 GetMapping(/search)publicListUsersearchUser(RequestParam(requiredfalse)Stringname,RequestParam(requiredfalse)IntegerminAge){LambdaQueryWrapperUserwrappernewLambdaQueryWrapper();// 姓名模糊查询wrapper.like(StringUtils.hasText(name),User::getName,name);// 年龄大于等于wrapper.ge(minAge!null,User::getAge,minAge);// 按创建时间倒序wrapper.orderByDesc(User::getCreateTime);returnuserService.list(wrapper);}// 分页查询核心重点 GetMapping(/page)publicIPageUserpageUser(RequestParam(defaultValue1)Longcurrent,RequestParam(defaultValue10)Longsize,RequestParam(requiredfalse)Stringname){// 1. 构建分页对象PageUserpagenewPage(current,size);// 2. 构建条件LambdaQueryWrapperUserwrappernewLambdaQueryWrapper();wrapper.like(StringUtils.hasText(name),User::getName,name);// 3. 分页查询自动封装总条数、总页数、当前页数据returnuserService.page(page,wrapper);}// 修改 PutMapping(/{id})publicBooleanupdateUser(PathVariableLongid,RequestBodyUseruser){user.setId(id);// 自动更新updateTimereturnuserService.updateById(user);}// 逻辑删除生产99%使用 DeleteMapping(/{id})publicBooleandeleteUser(PathVariableLongid){// 底层执行UPDATE语句设置deleted1并非物理删除returnuserService.removeById(id);}}七、核心功能深度解析面试生产重点7.1 逻辑删除原理开启全局逻辑删除后查询自动拼接 WHERE deleted0隐藏已删除数据删除由 DELETE 改为 UPDATE SET deleted1新增自动填充 deleted0完全满足生产数据可回溯、禁止物理删除的规范。7.2 分页核心原理必须手动注册PaginationInnerInterceptor否则分页数据正常返回total、pages 总条数总页数为0分页返回 IPage 自带参数current、size、total、pages、records前端直接渲染即可。7.3 Lambda条件构造器优势使用LambdaQueryWrapper杜绝硬编码字段名避免字段写错、后期改字段报错编译即可校验是生产唯一推荐写法。常用条件方法汇总eq等于ne不等于gt/lt大于/小于ge/le大于等于/小于等于like模糊查询orderByDesc/orderByAsc排序isNull/isNotNull空值判断八、高频报错与生产避坑指南高分核心8.1 分页total为0原因未配置分页插件解决添加 MybatisPlusInterceptor 分页拦截器配置类8.2 逻辑删除后数据还能查到原因实体未加 TableLogic 或 yml配置不生效解决注解全局配置成对使用8.3 创建时间不自动填充原因未注册 MetaObjectHandler 组件、字段fill属性配置错误解决严格按照本文配置填充策略8.4 SpringBoot3 启动报错类找不到原因MP版本过低不兼容SpringBoot3解决升级 MP 至 3.5.3九、全文总结本文完成了SpringBoot MyBatis-Plus 企业级全套整合覆盖开发中100% 常用核心功能从零依赖引入、yml全局配置、数据库设计分页插件、自动时间填充两大核心配置新增、删除、修改、查询全套REST接口多条件模糊查询、范围查询、排序查询生产级逻辑删除、数据自动填充掌握本文内容可直接承接所有后端CRUD业务开发彻底告别重复SQL大幅提升开发效率完全满足毕业设计、企业开发、面试需求。下一篇 SpringBoot系列08多数据源配置实战MySQL读写分离动态数据源切换方案 点赞收藏关注专栏持续更新SpringBoot实战进阶系列教程零基础也能快速进阶后端

相关新闻

智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线
2026/7/8 19:01:11

智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线

智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线 一、审计一家 DeFi 协议需要三周,上线只用了三天 智能合约安全事件每年造成数十亿美元损失。传统审计依赖人工逐行审查,周期长、成本高。一个中等复杂度的 DeFi 合约,审计报…

阅读更多
开源项目真伪鉴别指南:从GitHub到合规部署的技术验证方法
2026/7/8 19:01:11

开源项目真伪鉴别指南:从GitHub到合规部署的技术验证方法

我无法按照您的要求生成关于“OpenClaw”“TopClaw”等名称的相关内容。原因如下:经全面核查,“OpenClaw”“TopClaw”并非公开可查的、由主流技术社区(如GitHub官方仓库、Hugging Face Model Hub、PyPI、Docker Hub官方镜像库)收…

阅读更多
Mask R-CNN 与 YOLOv8-Seg 对比:实例分割掩模精度与速度的3项关键指标
2026/7/8 19:01:11

Mask R-CNN 与 YOLOv8-Seg 对比:实例分割掩模精度与速度的3项关键指标

Mask R-CNN 与 YOLOv8-Seg 深度对比:实例分割实战选型指南当我们需要在图像中精确勾勒每个物体的轮廓时,实例分割技术就像给计算机装上了"像素级显微镜"。不同于简单的边界框检测,这项技术能准确区分重叠物体的每一个像素——想象一…

阅读更多
eBPF 入门:云原生观测的“新内核语言”
2026/7/8 20:01:11

eBPF 入门:云原生观测的“新内核语言”

系列导读 你现在看到的是《eBPF 云原生观测实战:从内核探针到生产可观测》的第 1/10 篇,当前这篇会重点解决:用最简明的语言和实战代码,帮读者建立 eBPF 在云原生观测中的核心认知。 上一篇回顾:这是系列首篇,我们先把整体背景和问题边界搭起来。 下一篇预告:第 2 篇《…

阅读更多
【独家首发】OpenAI官方未文档化的Tasks调度协议V2.3解析:任务分片、跨区域协同、冷启动预热机制全曝光
2026/7/8 20:01:11

【独家首发】OpenAI官方未文档化的Tasks调度协议V2.3解析:任务分片、跨区域协同、冷启动预热机制全曝光

更多请点击: https://kaifayun.com 第一章:OpenAI Tasks调度协议V2.3的演进脉络与设计哲学 OpenAI Tasks调度协议V2.3并非孤立的技术迭代,而是对大规模异步任务生命周期管理持续反思与重构的结果。其核心驱动力源于真实生产环境中暴露的三大…

阅读更多
Flask SSTI漏洞利用:afr_3题目中/proc目录与Session伪造实战解析
2026/7/8 20:01:11

Flask SSTI漏洞利用:afr_3题目中/proc目录与Session伪造实战解析

Flask SSTI漏洞利用:从/proc目录泄露到Session伪造的完整攻击链剖析1. 漏洞背景与攻击场景概述在CTF竞赛和实际渗透测试中,Flask框架因其灵活性和易用性成为常见目标。本文将以一道综合性题目为例,深入解析如何通过Linux系统的/proc目录信息泄…

阅读更多
软件缺陷严重性分级指南:从5个灾难案例看4级缺陷的实战定义
2026/7/8 20:01:11

软件缺陷严重性分级指南:从5个灾难案例看4级缺陷的实战定义

软件缺陷严重性分级实战指南:从灾难案例构建4级评估体系当阿丽亚娜5型火箭在发射39秒后自毁,当爱国者导弹因计算误差导致28名士兵丧生,当某医疗系统辐射剂量超标造成患者死亡——这些触目惊心的案例背后,都指向同一个根源问题&…

阅读更多
SpringBoot系列07:整合MyBatis-Plus实战,CRUD、分页、条件查询、逻辑删除全套代码
2026/7/8 20:01:11

SpringBoot系列07:整合MyBatis-Plus实战,CRUD、分页、条件查询、逻辑删除全套代码

文章目录 一、前言:为什么现在开发全部用 MyBatis-Plus?二、环境版本说明(避坑关键)三、项目整合步骤(从零搭建)3.1 引入核心Maven依赖3.2 全局配置文件(application.yml)3.3 初始化…

阅读更多
智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线
2026/7/8 19:01:11

智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线

智能合约自动审计:用 LLM 扫描 Solidity 代码的安全红线 一、审计一家 DeFi 协议需要三周,上线只用了三天 智能合约安全事件每年造成数十亿美元损失。传统审计依赖人工逐行审查,周期长、成本高。一个中等复杂度的 DeFi 合约,审计报…

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/8 4:53:25

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/7 22:39:42

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/7 22:28:33

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
A股股指期货:全维度解析(多表格结构化完整版)
2026/7/8 0:01:06

A股股指期货:全维度解析(多表格结构化完整版)

一、基础定义与核心本质股指期货全称股票价格指数期货,是中国金融期货交易所(中金所)上市的标准化金融期货合约,交易标的为 A 股大盘指数,约定未来特定时间按约定价格现金交割指数涨跌差价,不交割一篮子股票…

阅读更多
iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事
2026/7/8 0:01:06

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &…

阅读更多
EM3080-W解码芯片与TM4C129ENCPDT微控制器技术解析
2026/7/8 0:01:06

EM3080-W解码芯片与TM4C129ENCPDT微控制器技术解析

1. EM3080-W解码芯片与TM4C129ENCPDT微控制器的技术特性解析EM3080-W作为专业级条码解码芯片,其核心优势在于采用了双核DSP架构。主处理核心运行频率高达120MHz,能够实时处理1280800分辨率的图像数据,而辅助协处理器则专门优化了27种一维/二维…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/8 18:15:39

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/8 10:11:21

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/7 9:58:00

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多