发布时间:2026/7/13 2:02:12
SpringBoot 整合 MyBatis-Plus 代码生成器——告别手写重复代码
项目开发中最枯燥的就是反复写 Entity、Mapper、Service、Controller 这些模板代码。MyBatis-Plus 的代码生成器可以根据数据库表结构一键生成全套代码省下 80% 的重复劳动。一、为什么需要代码生成器一个典型的数据表需要写 4 层代码数据库表 user → Entity实体类字段 注解 → Mapper数据访问接口 XML → Service业务逻辑接口 实现 → ControllerRESTful 接口四层代码加起来少说 100 多行全是 getter/setter、CRUD 模板。如果项目有 20 张表就是 2000 行重复劳动。代码生成器一键搞定。二、引入依赖!-- MyBatis-Plus 核心 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version/dependency!-- 代码生成器 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.5.3.1/versionscopetest/scope/dependency!-- 模板引擎 --dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/versionscopetest/scope/dependency三、编写生成器代码代码生成器通常放在 test 目录下不打包到生产环境。publicclassCodeGenerator{publicstaticvoidmain(String[]args){// 数据源配置DataSourceConfigdataSourceConfignewDataSourceConfig.Builder(jdbc:mysql://localhost:3306/seckill_db?useUnicodetruecharacterEncodingutf-8,root,123456).build();// 全局配置GlobalConfigglobalConfignewGlobalConfig.Builder().outputDir(System.getProperty(user.dir)/src/main/java).author(张政).openDir(false).build();// 包配置PackageConfigpackageConfignewPackageConfig.Builder().parent(com.zhang.seckill).entity(model.entity).service(service).serviceImpl(service.impl).mapper(mapper).controller(controller).build();// 策略配置StrategyConfigstrategyConfignewStrategyConfig.Builder().addInclude(seckill_product,seckill_order)// 要生成的表.addTablePrefix(seckill_)// 表前缀过滤.entityBuilder().enableLombok().enableTableFieldAnnotation().serviceBuilder().formatServiceFileName(%sService).formatServiceImplFileName(%sServiceImpl).controllerBuilder().enableRestStyle().enableHyphenStyle().build();// 执行生成AutoGeneratorgeneratornewAutoGenerator.Builder(dataSourceConfig).global(globalConfig).packageInfo(packageConfig).strategy(strategyConfig).build();generator.execute();}}四、生成效果运行main方法后自动生成以下文件src/main/java/com/zhang/seckill/ ├── model/entity/ │ ├── SeckillProduct.java ← 实体类带 TableName、TableId 注解 │ └── SeckillOrder.java ├── mapper/ │ ├── SeckillProductMapper.java ← Mapper 接口继承 BaseMapper │ └── SeckillOrderMapper.java ├── service/ │ ├── SeckillProductService.java ← Service 接口 │ └── SeckillOrderService.java ├── service/impl/ │ ├── SeckillProductServiceImpl.java ← Service 实现继承 ServiceImpl │ └── SeckillOrderServiceImpl.java └── controller/ ├── SeckillProductController.java ← ControllerRESTful CRUD └── SeckillOrderController.java生成的 SeckillProductController 自带 CRUD 接口RestControllerRequestMapping(/seckill-product)publicclassSeckillProductController{AutowiredprivateSeckillProductServiceseckillProductService;GetMappingpublicResultVOPageSeckillProductlist(RequestParam(defaultValue1)intpage,RequestParam(defaultValue20)intsize){returnResultVO.success(seckillProductService.page(newPage(page,size)));}GetMapping(/{id})publicResultVOSeckillProductget(PathVariableLongid){returnResultVO.success(seckillProductService.getById(id));}PostMappingpublicResultVOSeckillProductadd(RequestBodySeckillProductproduct){seckillProductService.save(product);returnResultVO.success(product);}PutMapping(/{id})publicResultVOSeckillProductupdate(PathVariableLongid,RequestBodySeckillProductproduct){product.setId(id);seckillProductService.updateById(product);returnResultVO.success(product);}DeleteMapping(/{id})publicResultVO?delete(PathVariableLongid){seckillProductService.removeById(id);returnResultVO.success(删除成功);}}五、自定义模板如果不想用生成器默认的 Controller 模板可以自定义.controllerBuilder().templatePath(/templates/controller.java.vm)// 自定义模板路径在src/main/resources/templates/下放自己的模板文件// controller.java.vm简化版package${package.Controller};importorg.springframework.web.bind.annotation.*;import${package.Service}.${table.serviceName};RestControllerRequestMapping(/${table.entityPath})publicclass${table.controllerName}{Autowiredprivate${table.serviceName}${table.serviceName?uncap_first};GetMappingpublicResultVO?list(){returnResultVO.success(${table.serviceName?uncap_first}.list());}}六、实际开发建议// 1. 生成后手动调整// 自动生成的 Controller 只有基础 CRUD// 复杂的业务查询需要手写// 2. 只生成一次// 表结构稳定后再生成避免反复覆盖导致手写代码丢失// 3. 生成器配置建议strategyConfignewStrategyConfig.Builder().addInclude(user,product,order)// 指定表.entityBuilder().enableLombok()// 用 Lombok 省掉 getter/setter.enableTableFieldAnnotation()// 每个字段加 TableField.logicDeleteColumnName(is_deleted)// 逻辑删除.versionColumnName(version)// 乐观锁.controllerBuilder().enableRestStyle()// RestController.build();七、IDEA 插件替代方案除了代码生成器也可以直接在 IDEA 中安装 MyBatisX 插件File → Settings → Plugins → 搜索 MyBatisX → Install安装后在 Mapper 接口中 AltEnter 可以直接跳转到 XML比生成器更轻量。总结代码生成器的核心价值不是少写代码而是保证代码风格统一、减少低级错误。生成后只需要专注写业务逻辑模板代码交给生成器。生成器 → 模板代码 基础 CRUD 开发者 → 复杂 SQL 业务逻辑 异常处理 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。

相关新闻

MAX77654与MKV46F电源管理方案在工业物联网中的应用
2026/7/13 2:02:12

MAX77654与MKV46F电源管理方案在工业物联网中的应用

1. 项目背景与核心需求在嵌入式系统设计中,电源管理一直是个既基础又关键的环节。我最近为一个工业物联网终端设备设计电源架构时,就遇到了典型的电源管理挑战:设备需要同时满足低功耗运行、快速唤醒响应和多电压域供电的需求。这促使我深入研…

阅读更多
如何在30分钟内构建企业级GB28181视频监控平台:wvp-GB28181-pro容器化部署完整指南
2026/7/13 2:02:12

如何在30分钟内构建企业级GB28181视频监控平台:wvp-GB28181-pro容器化部署完整指南

如何在30分钟内构建企业级GB28181视频监控平台:wvp-GB28181-pro容器化部署完整指南 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视…

阅读更多
ROS map_server原理与实战:静态地图加载核心机制解析
2026/7/13 1:02:12

ROS map_server原理与实战:静态地图加载核心机制解析

1. 项目概述:从一张静态地图开始理解ROS导航的底层逻辑“ROS与SLAM入门教程-map_server介绍”——这个标题里藏着机器人自主移动最基础也最容易被忽略的一环。很多人一上来就扎进GMapping、Cartographer或者LOAM这些响当当的SLAM算法,调参数、看点云、调…

阅读更多
【2024最新】DeepSeek英文翻译能力权威白皮书:基于ISO/IEC 17100标准的8大维度评分,仅2家模型达标
2026/7/13 3:02:12

【2024最新】DeepSeek英文翻译能力权威白皮书:基于ISO/IEC 17100标准的8大维度评分,仅2家模型达标

更多请点击: https://kaifayun.com 第一章:DeepSeek英文翻译能力概览与白皮书发布背景 DeepSeek系列大模型自发布以来,持续强化多语言理解与生成能力,其中英文翻译作为核心能力之一,已通过大规模双语语料微调、跨语言…

阅读更多
MoveIt 2移动组接口深度解析:从原理到实战的C++编程指南
2026/7/13 3:02:12

MoveIt 2移动组接口深度解析:从原理到实战的C++编程指南

1. 项目概述:为什么你需要关注MoveIt 2的移动组接口?如果你正在用ROS 2搞机器人,尤其是涉及到机械臂、移动底盘或者任何需要复杂运动规划的玩意儿,那你大概率绕不开MoveIt 2。而“移动组”(Move Group)接口…

阅读更多
别再手写tool_schema了!用TypeScript+JSON Schema自动生成可执行工具契约(附GitHub Star 4.2k的开源工具链实战指南)
2026/7/13 3:02:12

别再手写tool_schema了!用TypeScript+JSON Schema自动生成可执行工具契约(附GitHub Star 4.2k的开源工具链实战指南)

更多请点击: https://codechina.net 第一章:AI Agent 工具调用机制的演进与范式变革 AI Agent 的工具调用能力已从早期硬编码接口调用,逐步演进为具备动态感知、自主规划与可验证执行的闭环系统。这一转变不仅体现在技术实现层面&#xff0c…

阅读更多
模板驱动型文档自动化:工业化内容生产的核心范式
2026/7/13 3:02:12

模板驱动型文档自动化:工业化内容生产的核心范式

1. 项目概述:这不是“套模板写文档”,而是用工业化思维重构内容生产流你有没有过这种体验:月底要交三份不同风格的行业白皮书,一份给技术团队看,一份给投资人汇报,一份给客户做售前材料——内容骨架其实差不…

阅读更多
OpenAI Codex 详细入门教学(2026 版)
2026/7/13 3:02:12

OpenAI Codex 详细入门教学(2026 版)

Codex 是 OpenAI 推出的AI 编程智能体(Agent),它不止是简单的代码补全工具,还能自主读取项目文件、修改代码、执行终端命令、运行测试并输出可验证的修改结果,相当于一个可以在本地代码仓库中工作的 AI 工程师。截至 2…

阅读更多
Nacos 2.3.2 Windows 单机部署:3步配置MySQL持久化与鉴权启动
2026/7/13 2:02:12

Nacos 2.3.2 Windows 单机部署:3步配置MySQL持久化与鉴权启动

Nacos 2.3.2 Windows 单机部署:MySQL持久化与鉴权配置实战指南对于需要在Windows服务器上部署Nacos的Java开发或运维人员来说,如何实现生产可用的单机部署是一个关键问题。本文将深入讲解如何将Nacos从默认的嵌入式数据库迁移到MySQL,并配置鉴…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/12 0:01:57

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/12 0:01:57

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/12 0:01:57

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
UE5 Niagara火焰特效性能优化实战:从GPU负载到移动端适配
2026/7/13 0:02:12

UE5 Niagara火焰特效性能优化实战:从GPU负载到移动端适配

1. 项目概述:当火焰特效成为帧率杀手在UE5项目里,尤其是那些追求电影级视觉的开放世界或者大场景战斗游戏,一个熊熊燃烧的篝火、一次震撼的爆炸,往往是点燃玩家情绪的关键。Niagara作为虚幻引擎5中取代了老旧的Cascade的下一代粒子…

阅读更多
Cocos Creator游戏接入抖音小游戏侧边栏复访功能全流程指南
2026/7/13 0:02:12

Cocos Creator游戏接入抖音小游戏侧边栏复访功能全流程指南

1. 项目概述与核心价值 最近在对接抖音小游戏平台时,侧边栏复访功能成了一个绕不开的“必答题”。很多开发者朋友,包括我自己一开始,都对这个功能有点摸不着头脑:它到底是什么?为什么平台这么重视?不接入行…

阅读更多
浦东旧模块回收哪家强?专业评测带你一探究竟
2026/7/13 0:02:12

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/11 9:29:01

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

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

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/13 1:50:37

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

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

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

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

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

阅读更多