SpringBoot整合MyBatis-Plus代码生成器的示例代码

 更新时间:2026年07月13日 08:37:13   作者:张老师技术栈  
还在手动写Entity、Mapper、Service、Controller吗,本文教你用MyBatis-Plus代码生成器根据数据库表一键生成全套代码,节省80%重复劳动,保证风格统一,减少低级错误,附带IDEA插件MyBatisX替代方案,让开发更高效,需要的朋友可以参考下

项目开发中最枯燥的就是反复写 Entity、Mapper、Service、Controller 这些模板代码。MyBatis-Plus 的代码生成器可以根据数据库表结构一键生成全套代码,省下 80% 的重复劳动。

一、为什么需要代码生成器

一个典型的数据表需要写 4 层代码:

数据库表 user
  → Entity(实体类,字段 + 注解)
  → Mapper(数据访问接口 + XML)
  → Service(业务逻辑接口 + 实现)
  → Controller(RESTful 接口)

四层代码加起来少说 100 多行,全是 getter/setter、CRUD 模板。如果项目有 20 张表,就是 2000 行重复劳动。代码生成器一键搞定。

二、引入依赖

<!-- MyBatis-Plus 核心 -->
<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.3.1</version>
    <scope>test</scope>
</dependency>
<!-- 模板引擎 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
    <scope>test</scope>
</dependency>

三、编写生成器代码

代码生成器通常放在 test 目录下,不打包到生产环境。

public class CodeGenerator {

    public static void main(String[] args) {
        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(
            "jdbc:mysql://localhost:3306/seckill_db?useUnicode=true&characterEncoding=utf-8",
            "root",
            "123456"
        ).build();

        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig.Builder()
            .outputDir(System.getProperty("user.dir") + "/src/main/java")
            .author("张政")
            .openDir(false)
            .build();

        // 包配置
        PackageConfig packageConfig = new PackageConfig.Builder()
            .parent("com.zhang.seckill")
            .entity("model.entity")
            .service("service")
            .serviceImpl("service.impl")
            .mapper("mapper")
            .controller("controller")
            .build();

        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig.Builder()
            .addInclude("seckill_product", "seckill_order")  // 要生成的表
            .addTablePrefix("seckill_")                      // 表前缀过滤
            .entityBuilder()
            .enableLombok()
            .enableTableFieldAnnotation()
            .serviceBuilder()
            .formatServiceFileName("%sService")
            .formatServiceImplFileName("%sServiceImpl")
            .controllerBuilder()
            .enableRestStyle()
            .enableHyphenStyle()
            .build();

        // 执行生成
        AutoGenerator generator = new AutoGenerator.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 ← Controller(RESTful CRUD)
    └── SeckillOrderController.java

生成的 SeckillProductController 自带 CRUD 接口:

@RestController
@RequestMapping("/seckill-product")
public class SeckillProductController {

    @Autowired
    private SeckillProductService seckillProductService;

    @GetMapping
    public ResultVO<Page<SeckillProduct>> list(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "20") int size) {
        return ResultVO.success(
            seckillProductService.page(new Page<>(page, size)));
    }

    @GetMapping("/{id}")
    public ResultVO<SeckillProduct> get(@PathVariable Long id) {
        return ResultVO.success(seckillProductService.getById(id));
    }

    @PostMapping
    public ResultVO<SeckillProduct> add(@RequestBody SeckillProduct product) {
        seckillProductService.save(product);
        return ResultVO.success(product);
    }

    @PutMapping("/{id}")
    public ResultVO<SeckillProduct> update(
            @PathVariable Long id, @RequestBody SeckillProduct product) {
        product.setId(id);
        seckillProductService.updateById(product);
        return ResultVO.success(product);
    }

    @DeleteMapping("/{id}")
    public ResultVO<?> delete(@PathVariable Long id) {
        seckillProductService.removeById(id);
        return ResultVO.success("删除成功");
    }
}

五、自定义模板

如果不想用生成器默认的 Controller 模板,可以自定义:

.controllerBuilder()
.templatePath("/templates/controller.java.vm")  // 自定义模板路径

src/main/resources/templates/ 下放自己的模板文件:

// controller.java.vm(简化版)
package ${package.Controller};

import org.springframework.web.bind.annotation.*;
import ${package.Service}.${table.serviceName};

@RestController
@RequestMapping("/${table.entityPath}")
public class ${table.controllerName} {

    @Autowired
    private ${table.serviceName} ${table.serviceName?uncap_first};

    @GetMapping
    public ResultVO<?> list() {
        return ResultVO.success(
            ${table.serviceName?uncap_first}.list());
    }
}

六、实际开发建议

// 1. 生成后手动调整
// 自动生成的 Controller 只有基础 CRUD
// 复杂的业务查询需要手写

// 2. 只生成一次
// 表结构稳定后再生成,避免反复覆盖导致手写代码丢失

// 3. 生成器配置建议
strategyConfig = new StrategyConfig.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 接口中 Alt+Enter 可以直接跳转到 XML,比生成器更轻量。

总结

代码生成器的核心价值不是"少写代码",而是保证代码风格统一、减少低级错误。生成后只需要专注写业务逻辑,模板代码交给生成器。

生成器 → 模板代码 + 基础 CRUD
开发者 → 复杂 SQL + 业务逻辑 + 异常处理

以上就是SpringBoot整合MyBatis-Plus代码生成器的示例代码的详细内容,更多关于SpringBoot整合MyBatis-Plus代码生成器的资料请关注脚本之家其它相关文章!

相关文章

  • IDEA中配置操作Git的详细图文教程

    IDEA中配置操作Git的详细图文教程

    这篇文章给大家详细介绍在IDEA中配置Git,IDEA中操作Git的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • IDEA搭建配置Java Web项目的详细步骤

    IDEA搭建配置Java Web项目的详细步骤

    这篇文章详细介绍了如何使用IDEA创建和配置JavaWeb项目,包括项目结构设置、WEB-INF目录和jsp文件的创建,以及Tomcat的配置,是Java初学者的实用指南,需要的朋友可以参考下
    2024-10-10
  • springboot bean扫描路径的实现

    springboot bean扫描路径的实现

    这篇文章主要介绍了springboot bean扫描路径的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 使用Java将CSV文件转换为格式化的Excel文件

    使用Java将CSV文件转换为格式化的Excel文件

    在日常的数据处理和报表生成工作中,CSV 格式因其简洁性而被广泛采用,但在展示数据时,CSV 文件往往缺乏格式和结构化样式,不利于阅读与分析,所以本文将介绍如何使用 Java 将 CSV 文件转换为 Excel 文件,需要的朋友可以参考下
    2025-12-12
  • Spring Cloud Feign请求添加headers的实现方式

    Spring Cloud Feign请求添加headers的实现方式

    这篇文章主要介绍了Spring Cloud Feign请求添加headers的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java集合之Map接口与实现类详解

    Java集合之Map接口与实现类详解

    这篇文章主要为大家详细介绍了Java集合中的Map接口与实现类,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的可以了解一下
    2022-12-12
  • Spring AOP底层原理及代理模式

    Spring AOP底层原理及代理模式

    这篇文章主要为大家介绍了Spring AOP底层原理及代理模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java以struts2为例介绍如何实现图片上传

    Java以struts2为例介绍如何实现图片上传

    这篇文章主要介绍了Java struts2中如何实现图片上传的相关资料,需要的朋友可以参考下
    2015-11-11
  • 教你开发脚手架集成Spring Boot Actuator监控的详细过程

    教你开发脚手架集成Spring Boot Actuator监控的详细过程

    这篇文章主要介绍了开发脚手架集成Spring Boot Actuator监控的详细过程,集成包括引入依赖配置文件及访问验证的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • JVM中ClassLoader类加载器的深入理解

    JVM中ClassLoader类加载器的深入理解

    这篇文章主要给大家介绍了关于JVM中ClassLoader类加载器的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05

最新评论