【教程】Mybatis-Plus代码生成器,详解

背景

  最近又接了一个新项目,项目从0开始。经过架构设计、表设计、架构搭建,进入了代码编写阶段。为减轻大家的基础工作量,决定使用Mybatis-Plus的自定义模板生成code功能,来完成简单表的crud编写。

本文的价值

  1. 介绍Mybatis-Plus代码生成器的使用。
  2. 使用Mybatis-Plus代码生成器的一些注意事项。

进入正文

Mybatis-Plus代码生成器可以做什么

  【官网介绍】AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
  【本文】详细解读官网的配置

上代码解读

  本文通过对官网代码进行整理,并加入了部分内容。

代码生成器

生成器组成

  生成器包括,全局配置、数据源配置、 包路径配置、配置模板、策略配置、自定义模板配置组成,最后execute来执行。

public static void main(String[] args) {
        //全局配置
        GlobalConfig gc = getGlobalConfig();
        //数据源配置
        DataSourceConfig dsc = getDataSourceConfig();
        //包配置
        PackageConfig pc = getPackageConfig();
        //配置模板
        TemplateConfig templateConfig = getTemplateConfig();
        //策略配置
        StrategyConfig strategy = getStrategyConfig();
        // 自定义配置
        InjectionConfig cfg = getInjectionConfig();

        new AutoGenerator().setGlobalConfig(gc)
                .setDataSource(dsc)
                .setPackageInfo(pc)
                .setStrategy(strategy)
                .setTemplate(templateConfig)
                // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setCfg(cfg)
                .execute();
    }

全局配置-GlobalConfig

private static GlobalConfig getGlobalConfig() {
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //设置文件作者author
        gc.setAuthor(AUTHOR);
        //打开文件
        gc.setOpen(true);
        String projectPath = System.getProperty("user.dir");
        //设置文件生成后,open弹窗的路径
        gc.setOutputDir(projectPath);
        //文件覆盖
        gc.setFileOverride(true);
        //是否重写model的pkVal方法
        gc.setActiveRecord(true);
        // XML 二级缓存
        gc.setEnableCache(false);
        // XML ResultMap 生成查询的映射结果
        gc.setBaseResultMap(true);
        // XML columList 生成查询的结果列
        gc.setBaseColumnList(false);
        // 设置swagger注解 ,这个要把swagger的依赖添加好,否则可先置为false
        gc.setSwagger2(true);
        return gc;
    }

数据源配置-DataSourceConfig

  数据源配置,【注意】如果是PostgreSql数据库,建议设置schemaName,否则默认为public

private static DataSourceConfig getDataSourceConfig() {
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DB_TYPE);
        dsc.setUrl(DB_URL);
        dsc.setDriverName(DB_DRIVER_CLASS_NAME);
        dsc.setUsername(DB_USER_NAME);
        dsc.setPassword(DB_PASSWORD);
        //【重要】如果是postgreSql必须要指定schemaName,否则默认为public。
        return dsc;
    }

包路径配置-PackageConfig

  设置的包配置,为生成文件中,package的路径,需要是形如:xxx.xxx.xxx,这种用 . 来连接的路径,这里设置要根据项目结构来灵活配置。

	private static PackageConfig getPackageConfig() {
        String entity = DAO_OUTPUT_MODULE + ENTITY_PATH;
        String mapper = DAO_OUTPUT_MODULE + MAPPER_PATH;
        String xml = DAO_OUTPUT_MODULE + XML_PATH;
        String service = SERVICE_OUTPUT_MODULE + SERVICE_PATH;
        String serviceImpl = SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
        String controller = CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;
        return new PackageConfig()
                // 地址需要解析成,形如xxx.xxx.xxx.xxx这种点.连接形式
                .setParent(PARENT_PACKAGE_PATH.replace('/', '.').substring(1))
                .setEntity(getPointLinkString(entity))
                .setMapper(getPointLinkString(mapper))
                .setXml(getPointLinkString(xml))
                .setService(getPointLinkString(service))
                .setServiceImpl(getPointLinkString(serviceImpl))
                .setController(getPointLinkString(controller));
    }
    private static String getPointLinkString(String slashLinkString){
        //将所有/转为.然后,将首字符删除
       return slashLinkString.replace('/', '.').substring(1, slashLinkString.length()-1);
    }

配置模板-TemplateConfig

  自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称,只要放到目录下,名字不变,就会采用这个模版。

 private static TemplateConfig getTemplateConfig() {
        TemplateConfig templateConfig = new TemplateConfig();
        //配置自定义输出模板
        // 不需要其他的类型时,直接设置为null就不会成对应的模版了
        templateConfig.setEntity(null);
        templateConfig.setService(null);
        templateConfig.setController(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setXml(null);
        // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也
        // 可以自定义模板名称 只要放到目录下,名字不变 就会采用这个模版 下面这句有没有无所谓
        // 模版去github上看地址:
        /**https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main/resources/templates*/
        // templateConfig.setEntity("/templates/entity.java");
        return templateConfig;
    }

策略配置-StrategyConfig

  生成文件与数据库、架构依赖等等方面的一些自定配置,如:驼峰命名、swagger注解、自动填充、去除表前缀、lombook注解等等,详见以下代码:

    private static StrategyConfig getStrategyConfig() {
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        //驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //需要添加lombok依赖
        strategy.setEntityLombokModel(true);
        //去除表前缀
        strategy.setTablePrefix(ENTITY_IGNORE_PREFIX);
        // TODO 指定生成的bean的数据库表名
        // strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setInclude(TABLES);
        //strategy.setSuperEntityColumns("id");
        // 驼峰转连接字符
        strategy.setControllerMappingHyphenStyle(true);
        //生成实体类字段注解(会在entity实体属性上加@TableField)
        strategy.setEntityTableFieldAnnotationEnable(true);
        // 自定义需要填充的字段
        List<TableFill> tableFillList = getTableFills();
        strategy.setTableFillList(tableFillList);
        // 设置逻辑删除键和version字段
        strategy.setLogicDeleteFieldName(DB_DEL_FLAG);
        strategy.setVersionFieldName(DB_VERSION);
        return strategy;
    }

    private static List<TableFill> getTableFills() {
        List<TableFill> tableFillList = new ArrayList<>();
        //每张表建议都有创建时间,创建人,修改人,修改时间,逻辑删除,版本这几个属性。
        //使用自动填充功能,就可以实现,按场景填充属性,具体问题具体分析,非选。
        //如下是配置(可选)
        TableFill createTime = new TableFill(DB_CREATE_TIME, FieldFill.INSERT);
        TableFill createUser = new TableFill(DB_CREATE_USER, FieldFill.INSERT);
        TableFill updateTime = new TableFill(DB_UPDATE_TIME, FieldFill.INSERT_UPDATE);
        TableFill updateUser = new TableFill(DB_UPDATE_USER, FieldFill.INSERT_UPDATE);
        TableFill version = new TableFill(DB_VERSION, FieldFill.INSERT);
        TableFill delFlag = new TableFill(DB_DEL_FLAG, FieldFill.INSERT);
        tableFillList.add(createTime);
        tableFillList.add(createUser);
        tableFillList.add(updateTime);
        tableFillList.add(updateUser);
        tableFillList.add(version);
        tableFillList.add(delFlag);
        return tableFillList;
    }

自定义模板配置-InjectionConfig

  自定义输出文件的模板地址、覆盖策略、命名、路径等,详见如下代码:

    private static InjectionConfig getInjectionConfig() {
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        //--有以下代码则会选择性覆盖之前产生的文件,这个看场景决定---start----
        cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 检查文件目录,不存在自动递归创建
                checkDir(filePath);
                // 指定需要覆盖的文件
                // 文件结尾名字参照 全局配置 中对各层文件的命名,未修改为默认值
                return !isExists(filePath) || (filePath.endsWith("Mapper.xml") || filePath.endsWith("Dao.java") || filePath.endsWith("Mapper.java"));
            }
        });
        //--有以上代码则会选择性覆盖之前产生的文件---end----
        List<FileOutConfig> focList = getFileOutConfigs();
        cfg.setFileOutConfigList(focList);
        return cfg;
    }
    /**
     * 判断文件是否存在
     * @param path 路径
     * @return 文件是否创建
     */
    private static boolean isExists(String path) {
        File file = new File(path);
        return file.exists();
    }
    private static List<FileOutConfig> getFileOutConfigs() {
        String projectPath = System.getProperty("user.dir");
        //【注意】会检测模板,如果重复则不会重复生成,可能直接跳过
        List<FileOutConfig> focList = new ArrayList<>();
        // 实体类文件输出
        focList.add(new FileOutConfig(ENTITY_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + ENTITY_OUTPUT_PATH +tableInfo.getEntityName() + StringPool.DOT_JAVA;
            }
        });
        // mapper xml文件输出
        focList.add(new FileOutConfig(XML_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + XML_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_XML;
            }
        });
        // mapper文件输出
        focList.add(new FileOutConfig(MAPPER_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + MAPPER_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_JAVA;
            }
        });
        // service文件输出
        focList.add(new FileOutConfig(SERVICE_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + SERVICE_OUTPUT_PATH + tableInfo.getServiceName() + StringPool.DOT_JAVA;
            }
        });
        // service impl文件输出
        focList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + SERVICE_IMPL_OUTPUT_PATH + tableInfo.getServiceImplName() + StringPool.DOT_JAVA;
            }
        });
        // controller文件输出
        focList.add(new FileOutConfig(CONTROLLER_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + CONTROLLER_OUTPUT_PATH + tableInfo.getControllerName() + StringPool.DOT_JAVA;
            }
        });

        //生成扩展的模板和实体
        getFileOutConfigsExpand(focList);
        return focList;
    }

完整代码及pom依赖

  pom依赖:mybatis-plus+freemarker

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

  以下是完整代码,请大家参考使用:

package com.xxxx.utils;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.IFileCreate;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.FileType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * mybatis的代码生成器
 * @author 木木归来
 * @since 2021-02-11 20:34
 **/
public class MysqlGenerator {
    /** 作者姓名,生成在文件作者栏目 */
    private static final String AUTHOR = "木木归来";
    /** 生成的实体类忽略表前缀: 不需要则置空;如表为prefix_user_info,需要去掉prefix,则此处配置为prefix或prefix_均可 */
    private static final String ENTITY_IGNORE_PREFIX = "";
    /** 需要进行自动生成的表名,也可以通过scanner来控制台输入 */
    private static final String[] TABLES = {
            "表名",
    };


    // 看情况,生成文件输出的路径,是否要区分模块,若没有则置空
    /** Entity.java, Mapper.java, Mapper.xml输出模块路径 */
    private static final String DAO_OUTPUT_MODULE = "";
    /** mapper.xml输出模块路径([注意]放置的位置:默认从模块/src/main下开始) */
    private static final String XML_OUTPUT_MODULE = "";
    /** IService.java, serviceImpl.java输出模块路径 */
    private static final String SERVICE_OUTPUT_MODULE = "";
    /** Controller.java输出模块路径 */
    private static final String CONTROLLER_OUTPUT_MODULE = "";


    /** 父包名路径(文件输出路径,也是导包的路径,package路径) */
    private static final String PARENT_PACKAGE_PATH = "/com/xxx/generator";

    /** 各层包名 */
    private static final String ENTITY_PATH = "/domain/entity/";
    private static final String MAPPER_PATH = "/mapper/";
    private static final String XML_PATH = "/resource/generator/mapper/";
    private static final String SERVICE_PATH = "/service/";
    private static final String SERVICE_IMPL_PATH = "/service/impl/";
    private static final String CONTROLLER_PATH = "/controller/";

    /** 数据库 */
    private static final String DB_USER_NAME = "root";
    private static final String DB_PASSWORD = "root";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&useSSL=false" +
            "&characterEncoding=utf8&serverTimezone=UTC";
    private static final DbType DB_TYPE = DbType.MYSQL;
    private static final String DB_DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";

    private static final String DB_CREATE_TIME="create_time";
    private static final String DB_CREATE_USER="create_user";
    private static final String DB_UPDATE_TIME="update_time";
    private static final String DB_UPDATE_USER="update_user";
    private static final String DB_VERSION="version";
    private static final String DB_DEL_FLAG="is_deleted";

    // 自定义输出模板和位置
    // 文件位置输出模式: file output path = projectPath + XX_OUTPUT_PATH  + File
    // XX_OUTPUT_PATH = modulePath + packagePath
    /** entity输出模板 */
    private static final String ENTITY_TEMPLATE = "templates/entity.java.ftl";
    private static final String ENTITY_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + DAO_OUTPUT_MODULE + ENTITY_PATH;
    /** mapper.xml输出模板 */
    private static final String XML_TEMPLATE = "templates/mapper.xml.ftl";
    private static final String XML_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main" + XML_OUTPUT_MODULE + XML_PATH;
    /** mapper.java输出模板 */
    private static final String MAPPER_TEMPLATE = "templates/mapper.java.ftl";
    private static final String MAPPER_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + DAO_OUTPUT_MODULE + MAPPER_PATH;
    /** service输出模板 */
    private static final String SERVICE_TEMPLATE = "templates/service.java.ftl";
    private static final String SERVICE_OUTPUT_PATH = SERVICE_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + SERVICE_OUTPUT_MODULE + SERVICE_PATH;
    /** serviceImpl输出模板 */
    private static final String SERVICE_IMPL_TEMPLATE = "templates/serviceImpl.java.ftl";
    private static final String SERVICE_IMPL_OUTPUT_PATH = SERVICE_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
    /** controller输出模板 */
    private static final String CONTROLLER_TEMPLATE = "templates/controller.java.ftl";
    private static final String CONTROLLER_OUTPUT_PATH =
            CONTROLLER_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;

    /**
     * RUN THIS 官方文档地址:https://mp.baomidou.com/guide/generator.html
     */
    public static void main(String[] args) {
        //全局配置
        GlobalConfig gc = getGlobalConfig();
        //数据源配置
        DataSourceConfig dsc = getDataSourceConfig();
        //包配置
        PackageConfig pc = getPackageConfig();
        //配置模板
        TemplateConfig templateConfig = getTemplateConfig();
        //策略配置
        StrategyConfig strategy = getStrategyConfig();
        // 自定义配置
        InjectionConfig cfg = getInjectionConfig();

        new AutoGenerator().setGlobalConfig(gc)
                .setDataSource(dsc)
                .setPackageInfo(pc)
                .setStrategy(strategy)
                .setTemplate(templateConfig)
                // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setCfg(cfg)
                .execute();
    }


    private static InjectionConfig getInjectionConfig() {
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        //--有以下代码则不会覆盖之前产生的文件,这个看场景决定---start----
//        cfg.setFileCreate(new IFileCreate() {
//            @Override
//            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
//                // 检查文件目录,不存在自动递归创建
//                checkDir(filePath);
//                // 指定需要覆盖的文件
//                // 文件结尾名字参照 全局配置 中对各层文件的命名,未修改为默认值
//                return !isExists(filePath) || (filePath.endsWith("Mapper.xml") || filePath.endsWith("Dao.java") || filePath.endsWith("Mapper.java"));
//            }
//        });
        //--有以上代码则不会覆盖之前产生的文件---end----
        List<FileOutConfig> focList = getFileOutConfigs();
        cfg.setFileOutConfigList(focList);
        return cfg;
    }
    /**
     * 判断文件是否存在
     * @param path 路径
     * @return 文件是否创建
     */
    private static boolean isExists(String path) {
        File file = new File(path);
        return file.exists();
    }
    private static List<FileOutConfig> getFileOutConfigs() {
        String projectPath = System.getProperty("user.dir");
        List<FileOutConfig> focList = new ArrayList<>();
        // 实体类文件输出
        focList.add(new FileOutConfig(ENTITY_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + ENTITY_OUTPUT_PATH + tableInfo.getEntityName() + StringPool.DOT_JAVA;
            }
        });
        // mapper xml文件输出
        focList.add(new FileOutConfig(XML_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + XML_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_XML;
            }
        });
        // mapper文件输出
        focList.add(new FileOutConfig(MAPPER_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + MAPPER_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_JAVA;
            }
        });
        // service文件输出
        focList.add(new FileOutConfig(SERVICE_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + SERVICE_OUTPUT_PATH + tableInfo.getServiceName() + StringPool.DOT_JAVA;
            }
        });
        // service impl文件输出
        focList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + SERVICE_IMPL_OUTPUT_PATH + tableInfo.getServiceImplName() + StringPool.DOT_JAVA;
            }
        });
        // controller文件输出
        focList.add(new FileOutConfig(CONTROLLER_TEMPLATE) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + CONTROLLER_OUTPUT_PATH + tableInfo.getControllerName() + StringPool.DOT_JAVA;
            }
        });
        return focList;
    }


    private static StrategyConfig getStrategyConfig() {
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        //驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //需要添加lombok依赖
        strategy.setEntityLombokModel(true);
        //去除表前缀
        strategy.setTablePrefix(ENTITY_IGNORE_PREFIX);
        // TODO 指定生成的bean的数据库表名
        // strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setInclude(TABLES);
        //strategy.setSuperEntityColumns("id");
        // 驼峰转连接字符
        strategy.setControllerMappingHyphenStyle(true);
        //生成实体类字段注解(会在entity实体属性上加@TableField)
        //strategy.setEntityTableFieldAnnotationEnable(true);
        // 自定义需要填充的字段
        List<TableFill> tableFillList = getTableFills();
        strategy.setTableFillList(tableFillList);
        // 设置逻辑删除键和version字段
        strategy.setLogicDeleteFieldName(DB_DEL_FLAG);
        strategy.setVersionFieldName(DB_VERSION);
        return strategy;
    }

    private static List<TableFill> getTableFills() {
        List<TableFill> tableFillList = new ArrayList<>();
        //每张表建议都有创建时间,创建人,修改人,修改时间,逻辑删除,版本这几个属性。
        //使用自动填充功能,就可以实现,按场景填充属性,具体问题具体分析,非选。
        //如下是配置(可选)
        TableFill createTime = new TableFill(DB_CREATE_TIME, FieldFill.INSERT);
        TableFill createUser = new TableFill(DB_CREATE_USER, FieldFill.INSERT);
        TableFill updateTime = new TableFill(DB_UPDATE_TIME, FieldFill.INSERT_UPDATE);
        TableFill updateUser = new TableFill(DB_UPDATE_USER, FieldFill.INSERT_UPDATE);
        TableFill version = new TableFill(DB_VERSION, FieldFill.INSERT);
        TableFill delFlag = new TableFill(DB_DEL_FLAG, FieldFill.INSERT);
        tableFillList.add(createTime);
        tableFillList.add(createUser);
        tableFillList.add(updateTime);
        tableFillList.add(updateUser);
        tableFillList.add(version);
        tableFillList.add(delFlag);
        return tableFillList;
    }


    private static TemplateConfig getTemplateConfig() {
        TemplateConfig templateConfig = new TemplateConfig();
        //配置自定义输出模板
        // 不需要其他的类型时,直接设置为null就不会成对应的模版了
        templateConfig.setEntity(null);
        templateConfig.setService(null);
        templateConfig.setController(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setXml(null);
        // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也
        // 可以自定义模板名称 只要放到目录下,名字不变 就会采用这个模版 下面这句有没有无所谓
        // 模版去github上看地址:
        /**https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main/resources/templates*/
        // templateConfig.setEntity("/templates/entity.java");
        return templateConfig;
    }


    private static PackageConfig getPackageConfig() {
        String entity = DAO_OUTPUT_MODULE + ENTITY_PATH;
        String mapper = DAO_OUTPUT_MODULE + MAPPER_PATH;
        String xml = DAO_OUTPUT_MODULE + XML_PATH;
        String service = SERVICE_OUTPUT_MODULE + SERVICE_PATH;
        String serviceImpl = SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
        String controller = CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;
        return new PackageConfig()
                // 地址需要解析成,形如xxx.xxx.xxx.xxx这种点.连接形式
                .setParent(PARENT_PACKAGE_PATH.replace('/', '.').substring(1))
                .setEntity(getPointLinkString(entity))
                .setMapper(getPointLinkString(mapper))
                .setXml(getPointLinkString(xml))
                .setService(getPointLinkString(service))
                .setServiceImpl(getPointLinkString(serviceImpl))
                .setController(getPointLinkString(controller));
    }
    private static String getPointLinkString(String slashLinkString){
        //将所有/转为.然后,将首字符删除
       return slashLinkString.replace('/', '.').substring(1, slashLinkString.length()-1);
    }

    private static DataSourceConfig getDataSourceConfig() {
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DB_TYPE);
        dsc.setUrl(DB_URL);
        dsc.setDriverName(DB_DRIVER_CLASS_NAME);
        dsc.setUsername(DB_USER_NAME);
        dsc.setPassword(DB_PASSWORD);
        return dsc;
    }


    private static GlobalConfig getGlobalConfig() {
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //设置文件作者author
        gc.setAuthor(AUTHOR);
        //打开文件
        gc.setOpen(true);
        String projectPath = System.getProperty("user.dir");
        //设置文件生成后,open弹窗的路径
        gc.setOutputDir(projectPath);
        //文件覆盖
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        // XML 二级缓存
        gc.setEnableCache(false);
        // XML ResultMap 生成查询的映射结果
        gc.setBaseResultMap(true);
        // XML columList 生成查询的结果列
        gc.setBaseColumnList(false);
        // 设置swagger注解 ,这个要把swagger的依赖添加好,否则可先置为false
        gc.setSwagger2(true);
        return gc;
    }

    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

}

更多信息,可以移步–>Mybatis-Plus官网

感谢阅读!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值