POST / POSTS

在 Spring Boot 中高效配置 MyBatis-Plus 代码生成器

AI摘要
本文是一份关于如何在 Spring Boot 项目中集成并使用 MyBatis-Plus 代码生成器 (AutoGenerator) 的详细指南。文章旨在帮助开发者通过简单的两步操作——添加必要的 Maven 依赖和编写一个配置完善的执行类——来自动生成包括 Entity, Mapper, Service, Controller 在内的全套后端代码。内容覆盖了数据源、全局设置、包路径规划以及核心生成策略(如 Lombok 支持、命名约定)的配置,从而极大提升开发效率,减少重复的模板代码编写工作。

MyBatis-Plus (MP) 作为 MyBatis 的强大增强工具,提供了许多实用的功能来简化开发,其中代码生成器 (AutoGenerator) 是一个能够显著提升开发效率的利器。它可以通过读取数据库表结构,一键自动生成对应的 Entity、Mapper、Service、Controller 等模板代码,让我们能更专注于业务逻辑的实现。

本文将详细介绍如何在 Spring Boot 项目中配置并使用 MyBatis-Plus 代码生成器。

第一步:添加 Maven 依赖

首先,我们需要在项目的 pom.xml 文件中引入代码生成器所需的核心依赖。

XML
<!-- SpringBoot 整合 Mybatis-Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

<!-- 代码生成器核心依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

<!--
  代码生成器默认采用 Velocity 作为模板引擎,
  此处我们引入 Velocity 引擎的依赖
-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

<!-- MySQL JDBC 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

第二步:编写并执行生成器代码

依赖添加完成后,我们只需创建一个包含 main 方法的 Java 类来配置和执行代码生成逻辑。通常,建议将这个类放在 src/test/java 目录下,因为它仅用于开发阶段,无需打包到最终的应用程序中。

JAVA
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGenerator {

    public static void main(String[] args) {
        // 1. 创建代码生成器对象
        AutoGenerator autoGenerator = new AutoGenerator();

        // 2. 配置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL); // 设置数据库类型
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/report?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("YOUR_PASSWORD_HERE"); // 替换为你的数据库密码
        autoGenerator.setDataSource(dataSourceConfig);

        // 3. 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        // 设置代码输出目录(建议使用绝对路径)
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        globalConfig.setAuthor("Heaven"); // 设置作者名称
        globalConfig.setOpen(false); // 生成后是否打开资源管理器
        // globalConfig.setServiceName("%sService"); // 自定义 Service 接口名,%s 会自动替换为表名
        autoGenerator.setGlobalConfig(globalConfig);

        // 4. 包名配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.heaven.demo01");   // 设置父包名
        packageConfig.setController("controller");
        packageConfig.setService("service");
        packageConfig.setServiceImpl("service.impl");
        packageConfig.setMapper("mapper");
        packageConfig.setEntity("pojo"); // 实体类包名,默认为 entity
        autoGenerator.setPackageInfo(packageConfig);

        // 5. 核心策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        // strategyConfig.setInclude("user", "product"); // 设置需要生成的表名,可变参数
        strategyConfig.setEntityLombokModel(true);  // 自动添加 @Lombok 注解
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 数据库表名映射到实体的命名策略(下划线转驼峰)
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 数据库表字段映射到实体的命名策略
        // strategyConfig.setTablePrefix("tbl_"); // 设置表前缀,生成实体时会自动去除
        autoGenerator.setStrategy(strategyConfig);

        // 6. 执行生成
        autoGenerator.execute();
    }
}

配置说明:

  • DataSourceConfig: 用于配置数据库连接信息,代码生成器会连接此数据库以获取表结构。
  • GlobalConfig: 全局性配置,如代码的输出路径、作者信息、是否覆盖已有文件等。
  • PackageConfig: 用于定义生成代码的包结构,例如 ControllerServiceMapper 等分别存放在哪个包下。
  • StrategyConfig: 这是最核心的配置,用于设定代码生成的策略,例如:
    • 指定要为哪些表生成代码 (setInclude)。
    • 是否使用 Lombok 简化实体类 (setEntityLombokModel)。
    • 数据库表名和字段名到实体类属性名的命名转换策略 (setNamingsetColumnNaming)。

配置完成后,直接运行这个 main 方法,MyBatis-Plus 就会根据你的设置,在指定目录下生成所有需要的代码文件。