MyBatis-Plus代码生成器

引用地址:https://blog.csdn.net/Flying_Fish_roe/article/details/142435279

MyBatis-Plus 提供了一个强大的 代码生成器,可以根据数据库表结构自动生成对应的实体类、Mapper 接口、Mapper XML 文件、Service 和 Controller 等代码。它极大地提高了开发效率,减少了手动编写基础代码的工作量。通过配置代码生成器,开发者可以快速生成项目中常用的 CRUD 代码,并且可以自定义生成策略,灵活调整生成的代码结构。
1. 什么是 MyBatis-Plus 代码生成器?

MyBatis-Plus 代码生成器基于模板引擎,可以自动生成以下内容:

    实体类:对应数据库表的 Java 实体类。
    Mapper 接口:用于数据库访问的 Mapper 接口。
    Mapper XML:与 Mapper 接口对应的 SQL 映射文件(可选)。
    Service 和 ServiceImpl:业务逻辑层的接口和实现类。
    Controller:处理 HTTP 请求的控制层代码(可选)。

通过代码生成器,开发者只需要配置好数据库连接和表名等信息,即可自动生成一套基础的代码结构,节省大量重复性工作。
2. 引入代码生成器依赖

首先,在 pom.xml 中引入 MyBatis-Plus 代码生成器的依赖:

<dependencies>
    <!-- MyBatis-Plus 代码生成器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.5.3</version>
    </dependency>

    <!-- 模板引擎(Freemarker 或 Velocity)-->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.3</version>
    </dependency>

    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.31</version>
    </dependency>
</dependencies>

    mybatis-plus-generator:MyBatis-Plus 代码生成器的核心依赖。
    velocity-engine-core:使用 Velocity 作为模板引擎,也可以选择 Freemarker 等其他模板引擎。
    mysql-connector-java:数据库驱动,具体数据库类型根据实际情况选择。

3. 基本代码生成器配置

MyBatis-Plus 代码生成器的核心配置通常通过 Java 代码实现,下面是一个简单的代码生成器配置示例。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
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;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

public class CodeGenerator {

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

        // 2. 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");  // 项目路径
        globalConfig.setOutputDir(projectPath + "/src/main/java");  // 输出目录
        globalConfig.setAuthor("Your Name");  // 作者
        globalConfig.setOpen(false);  // 生成后是否打开资源管理器
        globalConfig.setSwagger2(true);  // 开启 Swagger2 注解
        globalConfig.setServiceName("%sService");  // 去掉 Service 接口的首字母 I
        generator.setGlobalConfig(globalConfig);

        // 3. 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("yourpassword");
        dataSourceConfig.setDbType(DbType.MYSQL);
        generator.setDataSource(dataSourceConfig);

        // 4. 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo");  // 父包名
        packageConfig.setModuleName("user");  // 模块名
        generator.setPackageInfo(packageConfig);

        // 5. 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);  // 表名生成策略
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);  // 字段名生成策略
        strategyConfig.setEntityLombokModel(true);  // 自动生成 Lombok 注解
        strategyConfig.setRestControllerStyle(true);  // 生成 Rest 风格的 Controller
        strategyConfig.setInclude("user");  // 需要生成的表名(多个表可以使用逗号分隔)
        strategyConfig.setControllerMappingHyphenStyle(true);  // URL 中驼峰转连字符
        generator.setStrategy(strategyConfig);

        // 6. 配置模板引擎
        generator.setTemplateEngine(new VelocityTemplateEngine());

        // 7. 执行生成操作
        generator.execute();
    }
}

在这个示例中,我们进行了以下配置:

    全局配置 (GlobalConfig):
        设置代码生成的输出目录、作者信息。
        指定是否生成 Swagger2 注解(适用于生成 REST API 文档)。
        自定义 Service 接口的命名规则,去掉默认的 I 前缀。

    数据源配置 (DataSourceConfig):
        配置数据库连接的 URL、驱动、用户名和密码。

    包配置 (PackageConfig):
        设置生成代码的包结构,parent 用于定义顶层包名,moduleName 定义模块名。

    策略配置 (StrategyConfig):
        配置表和字段的命名规则(下划线转驼峰)。
        生成 Lombok 注解,减少 getter、setter 方法的编写。
        配置生成的 Controller 使用 REST 风格。

    模板引擎 (VelocityTemplateEngine):
        使用 Velocity 作为模板引擎,负责生成对应的代码文件。

4. 代码生成器的高级配置

MyBatis-Plus 的代码生成器非常灵活,支持多种自定义配置。下面介绍一些常见的高级配置选项。
4.1 自定义文件输出路径

可以通过 GlobalConfig.setOutputDir() 方法指定代码生成的输出路径。例如,将不同的文件生成到不同的目录下:

globalConfig.setOutputDir(projectPath + "/src/main/java");  // 默认输出到 src/main/java

4.2 忽略表前缀

在一些项目中,数据库表往往会有统一的前缀(如 t_ 表示表),代码生成器可以忽略这些前缀,以便生成的实体类更符合命名规范:

strategyConfig.setTablePrefix("t_");  // 忽略表前缀 t_

4.3 实体类字段的自动填充

对于数据库中的 create_time、update_time 等字段,通常需要在插入或更新时自动填充。MyBatis-Plus 代码生成器支持自动填充配置:

strategyConfig.setEntityTableFieldAnnotationEnable(true);  // 开启实体类字段注解

  

并在实体类的字段上添加 @TableField 注解:

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

 

4.4 自定义模板路径

如果需要修改生成的代码模板,可以自定义模板路径。MyBatis-Plus 允许通过设置自定义模板路径来覆盖默认模板:

TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/entity.java");  // 自定义实体类模板
generator.setTemplate(templateConfig);

    1
    2
    3

自定义模板文件可以放置在 resources/templates 目录下,并根据需求修改内容。
4.5 生成 Controller、Service、Mapper 等代码

MyBatis-Plus 代码生成器可以生成包括实体类、Mapper 接口、Service 和 Controller 等多种代码。通过 PackageConfig 和 StrategyConfig 可以选择需要生成的代码类型。

packageConfig.setController("controller");  // Controller 包名
packageConfig.setService("service");        // Service 包名
packageConfig.setMapper("mapper");          // Mapper 包名

 

如果不想生成某些代码(如 XML 映射文件),可以通过禁用模板来实现:


java
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);  // 禁止生成 XML 映射文件
generator.setTemplate(templateConfig);

 

5. 代码生成后的目录结构

执行代码生成器后,MyBatis-Plus 会根据配置生成对应的代码文件,常见的目录结构如下:

src
 └── main
     └── java
         └── com
             └── example
                 └── demo
                     ├── controller
                     │   └── UserController.java
                     ├── entity
                     │   └── User.java
                     ├── mapper
                     │   └── UserMapper.java
                     ├── service
                     │   ├── UserService.java
                     │   └── impl
                     │       └── UserServiceImpl.java
                     └── xml
                         └── UserMapper.xml

 

    controller:包含 REST 风格的控制层代码。
    entity:实体类文件,映射数据库表。
    mapper:Mapper 接口文件,定义了数据库操作的接口。
    service 和 service.impl:业务逻辑层代码。
    xml:Mapper 对应的 XML 文件(如果开启 XML 生成)。

6. 自定义模板内容

如果想要根据自己的需求修改生成的代码结构或内容,可以通过自定义模板来实现。MyBatis-Plus 使用 Velocity 或 Freemarker 作为模板引擎,可以在 resources/templates 目录下编写自定义模板文件。

例如,自定义实体类模板:

#(entity)
package #if(${packageName})${packageName}.entity#end;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("${tableName}")
public class ${entityName} {
    #foreach($field in $fields)
    /**
     * ${field.comment}
     */
    @TableId
    private ${field.type} ${field.name};
    #end
}

 

然后在代码生成器配置中指定自定义模板路径:

TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/custom_entity.java");  // 使用自定义的实体类模板
generator.setTemplate(templateConfig);

    1
    2
    3

结论

MyBatis-Plus 的代码生成器是一个非常强大的工具,通过简单的配置,开发者可以快速生成项目所需的基础代码,包括实体类、Mapper、Service 和 Controller 等。它极大地提高了开发效率,特别适合数据模型复杂的项目。通过灵活的配置选项和模板自定义,开发者可以根据项目需求生成符合自己风格的代码结构,从而专注于业务逻辑的开发。
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值