# MyBatis-Plus 代码生成器

# 引入依赖

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-generator</artifactId>
   <version>3.5.3.1</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.velocity</groupId>
   <artifactId>velocity-engine-core</artifactId>
   <version>2.3</version>
</dependency>

# 生成代码

package com.poilearn.generate;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
/**
 *  代码生成
 */
public class VelocityGen {
    /**
     * 启动
     **/
    public static void main(String[] args) {
        commonCreate();
    }
    /**
     * 代码生成
     */
    public static void commonCreate() {
        System.setProperty("file.encoding", "UTF-8");
        //---------  参数配置区域 开始  ---------------
        //  获取项目根目录
        String assembleIcpCodePath = System.getProperty("user.dir");
        // 项目根目录 +  模块名称  ( windows: / 跟 \\ 效果一样 )
//         String finalProjectPath = assembleIcpCodePath + File.separator +  GenPathEnum.MODULE_KNOWLEDGE.getName();
        String finalProjectPath = assembleIcpCodePath + File.separator
                /*
                + File.separator +  GenPathEnum.MODULE_ANALYSIS_FLOW.getName()//*/
                ;
        // 获取数据库配置, 根据需要 DbConfig 按照格式添加自己用到的  数据库配置
        // 作者
        String author = "dkx";
        // 父包名
        String packageName = "com";
        // 模块名称
        String moduleName = "poilearn";
        // 表名集合, 多表 用逗号隔开 :   aaa,bbb,ccc
        String tables = "tab_shop";
        // 表前缀:mds_
        String tablePrefix = "tab_";
        //---------  参数配置区域 结束  ---------------
        // 开始生成代码
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useUnicode=true", "root", "dkx..")
                // 全局配置
                .globalConfig(builder -> {
                    builder.author(author) // 设置作者
//                            .enableSwagger () // 开启 swagger 模式
                            .disableOpenDir() // 禁止打开输出目录
                            .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent(packageName) // 设置父包名
                            .moduleName(moduleName); // 设置父包模块名
                })
                // 模板配置
                .templateConfig(builder -> {
                    // 禁用模板
                    // 不生成 XML 文件
                    builder.disable(TemplateType.XML);
                    //builder.disable(TemplateType.ENTITY);
                    //builder.disable(TemplateType.CONTROLLER);
                    //builder.disable(TemplateType.SERVICE);
                    //builder.disable(TemplateType.SERVICE_IMPL);
                    //builder.disable(TemplateType.MAPPER);
                })
                // 策略:表名
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok()// 使用 lombok
                            .logicDeleteColumnName("is_deleted")// 逻辑删除字段名
                            .addTableFills(new Column("create_time", FieldFill.INSERT))// 自动填充配置
                            .addTableFills(new Column("create_by", FieldFill.INSERT))
                            .addTableFills(new Column("update_time", FieldFill.UPDATE))// 自动填充配置
                            .addTableFills(new Column("update_by", FieldFill.UPDATE))
                            .addTableFills(new Column("id", FieldFill.INSERT))// 自动填充配置
                            .enableTableFieldAnnotation()// 字段注解
                            .idType(IdType.ASSIGN_UUID)// 主键注解
                            .enableFileOverride()// 覆盖已有文件
                    ;
                    // 添加表前缀
                    if (StringUtils.isNotBlank(tablePrefix)) {
                        //*
                        builder.addTablePrefix(tablePrefix);
                        //*/
                    }
                    builder.controllerBuilder()
                            .enableHyphenStyle()// 开启驼峰
                            .enableRestStyle();// 开启 RestController
                    builder.addInclude(tables);
                })
                // 执行
                .execute();
    }
}