Java系列 - 最新 Mybatis Generator

最新版本的 mybatis-plus-generator 已经到了 3.5.3,这个代码库的管理真是一言难尽。

Mybatis Generator 3.5.0 以下版本使用方法,网上已经很多相关的老旧教程,不做讨论。

本文只针对版本 mybatis-plus-generator == 3.5.2,可以直接 copy运行

1.添加基本坐标

添加4个maven坐标:

<!--  Mybatis-plus -->
 
     com.baomidou
     mybatis-plus-boot-starter
     3.5.2
 
 
     com.baomidou
     mybatis-plus-extension
     3.5.2
 
 
     com.baomidou
     mybatis-plus-generator
     3.5.2
 
 
 
     org.apache.velocity
     velocity-engine-core
     2.3
 

 <!--  Swagger2 接口文档 可选 -->
 
     io.springfox
     springfox-swagger-ui
     2.9.2
 
 
     io.springfox
     springfox-swagger2
     2.9.2
 

2. 运行生成器

  • 功能:生成一个模块(需要手动修改的3处,已标注)
  • 运行: 直接运行此文件
package com.cool.reggie.config;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Collections;

/**
 * 代码生成器
 * mybatis-plus-generator == 3.5.2
 *
 * @author ifredom
 * @date 2022/07/01
 */
public class AutoCodeGenerator {
    /**
     * 项目根目录
     */
    private static final String PROJECT_ROOT_PATH = System.getProperty("user.dir");

    public static void main(String[] args) {
        // 1、数据源配置
        DataSourceConfig.Builder datasourceBuilder = new DataSourceConfig.Builder(
                "jdbc:mysql://localhost:3306/reggie?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC",
                "root",
                "123456"
        );

        // 2、创建代码生成器对象
        FastAutoGenerator generator = FastAutoGenerator.create(datasourceBuilder);

        // 3、全局配置
        generator.globalConfig(builder -> {
            // 设置作者
            builder.author("[email protected]")
                    // 定义生成的实体类中日期类型
                    .dateType(DateType.ONLY_DATE)
                    // 注释时间策略。
                    .commentDate("yyyy-MM-dd")
                    // 生成后是否打开资源管理器:否
                    .disableOpenDir()
                    // 开启 swagger 模式。如果开启,需要导入 swagger 的 pom 依赖
                    .enableSwagger()
                    // 指定输出目录
                    .outputDir(PROJECT_ROOT_PATH + "/src/main/java");
        });

        // 4、包配置
        generator.packageConfig(builder -> {
            // 父包名. ===========1.手动修改设置===========
            builder.parent("com.cool.reggie.modules")
                    // 将要生成的模块名称. ===========2.手动修改设置===========
                    .moduleName("employee")
                    // 设置生成的 控制层 文件夹名称
                    .controller("controller")
                    // 设置生成的 实体类 文件夹名称
                    .entity("entity")
                    // 设置生成的 服务层 文件夹名称
                    .service("service")
                    // 设置生成的 映射层 文件夹名称
                    .mapper("mapper")
                    // mapper.xml 文件路径。单模块下,其他文件路径默认即可。 ;
                    .pathInfo(Collections.singletonMap(OutputFile.xml, PROJECT_ROOT_PATH + "/src/main/resources/mapper"));
        });

        // 5、策略配置
        generator.strategyConfig(builder -> {
            // 设置数据库表名称. 如果不设置,则会将数据库中所有表都生成。(注意:需要与数据库中表名称一致,前缀也需添加)
            // ===========3.手动修改设置。===========
            builder.addInclude("ta_employee")
                    // 过滤表前缀,生成的类名会去掉这个前缀
                    .addTablePrefix("ta_", "sf_", "sk_")

                    // 第一阶段
                    // 是否生成 entity:是
                    .entityBuilder()
                    // 开启lombok
                    .enableLombok()
                    // 设置生成的实体类名称. 默认配置不带 Entity 后缀,我习惯添加上
                    .convertFileName(entityName -> entityName + "Entity")
                    // 开启实体时字段注解。 会在生成的实体类的字段上,添加注解: @TableField("nickname")
                    .enableTableFieldAnnotation()
                    // 设置主键Id生成策略,设置为默认的雪花算法(ASSIGN_ID)
                    .idType(IdType.ASSIGN_ID)
                    // 逻辑删除字段名。(与数据库中字段对应)
                    .logicDeleteColumnName("is_delete")
                    // 逻辑删除属性名。(定义在实体中的属性)。 会在生成的实体类的字段上,添加注解:@TableLogic
                    .logicDeletePropertyName("isDelete")
                    // 会在实体类的该字段上追加注解[@TableField(value = "create_time", fill = FieldFill.INSERT)]
                    .addTableFills(new Column("create_time", FieldFill.INSERT))
                    // 会在实体类的该字段上追加注解[@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)]
                    .addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))

                    // 第二阶段
                    .mapperBuilder()
                    // 开启 @Mapper 注解。 会在生成的 mapper 类上,添加注解:@Mapper
                    .enableMapperAnnotation()
                    // 启用 BaseResultMap 生成。 会在 mapper.xml文件生成[通用查询映射结果]配置。
                    .enableBaseResultMap()
                    // 启用 BaseColumnList。 会在mapper.xml文件生成[通用查询结果列 ]配置
                    .enableBaseColumnList()

                    // 第三阶段
                    .serviceBuilder()
                    // 设置生成的实体类名称。 默认配置名称前有个I,我习惯添去掉
                    .convertServiceFileName(serviceName -> serviceName + "Service")
                    // 第四阶段
                    .controllerBuilder()
                    // 开启 @RestController 注解。 会在生成的 Controller 类上,添加注解:@RestController
                    .enableRestStyle()

                    // 开启驼峰转连字符
                    .enableHyphenStyle();
        });

        // 6. 模板引擎配置,默认为 Velocity , 可选模板引擎 Freemarker 或 Beetl
        // generator.templateEngine(new FreemarkerTemplateEngine());

        generator.execute();

    }
}

如果 不设置 addInclude(“ta_employee”),那么会将所有表都生成,并在同一个目录模块下。
Java系列 - 最新 Mybatis Generator_第1张图片
最终效果,生成的代码都在 module.employee 文件夹中:

------ 如果文章对你有用,感谢右上角 >>>点赞 | 收藏 <<<

你可能感兴趣的:(java,java,mybatis,开发语言)