MyBatis-Plus 代码生成(新)

MyBatis-Plus 的代码生成功能十分人性化,即支持通过简单的配置实现,也可以通过自定义模板实现。

这里列出项目中的常用配置供参考,其他配置可以参考官网:https://baomidou.com/pages/981406

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.sevnce.base.core.global.controller.BaseController;
import com.sevnce.base.core.global.entity.BaseEntity;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 代码快速生成
 */
public class FastGenerator {

    /**
     * 作者名
     */
    public static final String AUTHOR = "廖航";
    
    /**
     * 生成的表名(多个表用英文逗号分隔,所有表输入 all)
     */
    private static final String TABLES = "all";

    /**
     * jdbc 路径
     */
    private static final String URL = "jdbc:mysql://dev.7tyun.com:9102/uam_new";

    /**
     * 数据库账号
     */
    private static final String USER_NAME = "root";

    /**
     * 数据库密码
     */
    private static final String PASS_WORD = "robot@db";

    /**
     * 项目所在目录
     */
    private static final String PROJECT = "D:\\Project\\SEVNCE\\sevnce-cloud";

    /**
     * 模块名
     */
    private static final String MODEL = "sevnce-modules\\sevnce-auth";

    /**
     * 包名
     */
    private static final String PARENT = "com.sevnce.auth";

    /**
     * 业务名
     */
    private static final String BUSINESS = "system";

    /**
     * 代码主路径(一般不用更改)
     */
    private static final String MAIN = "src\\main\\java";

    /**
     * mapperXml 路径(一般不用更改)
     */
    public static final String MAPPER = "src\\main\\resources\\mapper";

    /**
     * 父类公共字段(一般不用更改)
     */
    public static final List<String> COMMON_COLUMNS = new ArrayList<>(Arrays.asList("id", "create_by", "create_name", "create_date", "update_by", "update_name", "update_date", "del_flag", "remarks", "remark1", "remark2", "remark3", "remark4", "remark5"));

    public static void main(String[] args) {

        // 开始代码生成
        FastAutoGenerator.create(URL, USER_NAME, PASS_WORD)
                // 全局配置
                .globalConfig(builder -> { builder
                        // 禁止打开输出目录
                        .disableOpenDir()
                        // 指定输出目录(默认值: windows:D:// linux or mac : /tmp)
                        .outputDir(PROJECT + File.separator + MODEL + File.separator + MAIN)
                        // 开启 SpringDoc 模式
                        .enableSpringdoc()
                        // 作者名
                        .author(AUTHOR)
                        // 时间策略(默认值: DateType.TIME_PACK,java8 新的时间类型)
                        .dateType(DateType.TIME_PACK)
                        // 注释日期(默认值: yyyy-MM-dd)
                        .commentDate("yyyy-MM-dd HH:mm");
                })
                // 包配置
                .packageConfig(builder -> { builder
                        // 包名
                        .parent(PARENT)
                        // 业务名
                        .moduleName(BUSINESS)
                        .entity("entity.po")
                        // mapperXml 生成路径
                        .pathInfo(Collections.singletonMap(OutputFile.xml, PROJECT + File.separator + MODEL + File.separator + MAPPER));
                })
                // 策略配置
                .strategyConfig(builder -> { builder
                        // 设置需要生成的表名
                        .addInclude(getTables(TABLES))
                        // 控制层策略
                        .controllerBuilder()
                                // 设置父类
                                .superClass(BaseController.class)
                                // 生成 @RestController
                                .enableRestStyle()
                        // 服务层策略
                        .serviceBuilder()
                                // 服务类名称格式
                                .formatServiceFileName("%sService")
                        // 实体类策略
                        .entityBuilder()
                                // 设置父类
                                .superClass(BaseEntity.class)
                                // 添加父类公共字段
                                .addSuperEntityColumns(COMMON_COLUMNS)
                                // 开启 lombok 模型
                                .enableLombok()
                                // 不生成serialVersionUID(父类定义了)
                                .disableSerialVersionUID()
                                // 开启生成实体时生成字段注解
                                .enableTableFieldAnnotation()
                                // 逻辑删除字段名(数据库)
                                .logicDeleteColumnName("del_flag")
                                // 逻辑删除属性名(实体)
                                .logicDeletePropertyName("delFlag")
                                // 创建时间填充
                                .addTableFills(new Column("create_date", FieldFill.INSERT))
                                // 更新时间填充
                                .addTableFills(new Column("update_date", FieldFill.INSERT_UPDATE))
                                // 全局主键类型(自行设置)
                                .idType(IdType.INPUT)
                                // 是否允许覆盖现存文件
                                .enableFileOverride();
                })
                // 执行
                .execute();
    }

    /**
     * 处理所有表的情况
     * @param tables 表名
     * @return 结果
     */
    private static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}

posted @ 2023-02-23 22:11  天航星  阅读(100)  评论(0编辑  收藏  举报