MyBatis-Plus 代码自动生成器 MybatisPlusCodeGeneration

前言

因为官网给出的Generator 命名规范和用法非常让人头疼,这里对官网自动生成器的代码进行简单封装和命名规范,并添加了部分注释,可以直接运行,其主要功能:

  1. 只需要数据库URL和库名,时区自动自动拼接
  2. 所有可配置项作为常量,直接配置即可,可留空
  3. 可以自定义字段填充、乐观锁、逻辑删除
  4. 支持去掉表前缀
  5. 自定义个部分包名

依赖引入

引入mybatis-plus-generator代码生成器以及freemarker模板

	 <!-- code 生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!-- 模板文件 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>

使用方法

配置

  1. 根据需要配置,不需要可以为null(有注释注明除外)
  2. 直接运行Main方法即可,等待代码生成

说明:

  • model 字段为IDEA中项目栏目中的模块名称,若没有或在默认模块中(根目录)留空即可
  • 原官网上的模块对应packageModel字段,为在主包下建立一个子包,若不需要留空即可

源码

复制时注意去掉第一行package 换成自己的,类名需要和文件名一致

package cn.hll520.linling.core.code.generation;

import com.baomidou.mybatisplus.annotation.FieldFill;
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.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * 描述: 自动代码生成起
 *
 * @author lpc lpc@hll520.cn
 * @version 1.0  2021-01-31-22:12
 * @since 2021-01-31-22:12
 */
@SuppressWarnings("all")
public class MybatisPlusCodeGeneration {
    // 模块
    private static final String model = "linling-core-code-generation";
    // 数据库
    private static final String dataUrl = "jdbc:mysql://127.0.0.1:3306/linling_core";
    private static final String driveClass = "com.mysql.cj.jdbc.Driver";
    private static final String username = "root";
    private static final String password = "root";
    // 包设置
    private static final String packageName = "cn.hll520.linling.core.code.generation";  //pack
    private static final String packageModel = "";  // model 没有为""
    private static final String objectName = "po";  // po
    private static final String serviceName = "service";  // ser
    private static final String serviceImplName = "service.impl";  // ser Impl
    private static final String controlName = "control";  // ser
    private static final String daoClassName = "mapper";  // dao class
    private static final String daoResName = "mapper";  // dao res
    // 表设置
    private static final String[] tableName = {"linling_core_user"};   // 需要执行的表明
    private static final String[] tablePrefix = {"linling_core_"};  // 前缀 会自动去除
    // 字段设置
    private static final String createTime = "createTime";  // 创建时间字段
    private static final String updateTime = "updateTime";  // 更新时间字段
    private static final String logicDelteName = null;  // 逻辑删除
    private static final String versionName = null;  // 乐观锁


    /**
     * 更改上面配置后 执行
     *
     * @param args 参数
     */
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        autoConfig(autoGenerator);
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
        autoGenerator.execute();
    }

    /**
     * 自动 默认配置
     *
     * @param autoGenerator 自动代码生成
     */
    private static void autoConfig(AutoGenerator autoGenerator) {
        // 根模块目录
        String rootDir = System.getProperty("user.dir");
        String generationDir = rootDir + "\\" + model;
        System.err.println(generationDir);

        /*
         * -----------------------------------
         *           全局配置
         * -----------------------------------
         **/
        GlobalConfig globalConfig = new GlobalConfig();
        autoGenerator.setGlobalConfig(globalConfig);

        globalConfig.setOutputDir(generationDir + "/src/main/java"); // 代码输出目录
        globalConfig.setAuthor("lpc lpc@hll520.cn");
        globalConfig.setOpen(false); // 完成后不打开目录


        /*
         * -----------------------------------
         *           数据源配置
         * -----------------------------------
         **/
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        autoGenerator.setDataSource(dataSourceConfig);

        // 拼接数据库字符串
        String url = dataUrl + "?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC";
        dataSourceConfig.setUrl(url); // url
        dataSourceConfig.setDriverName(driveClass); // drive
        dataSourceConfig.setUsername(username); // 用户名
        dataSourceConfig.setPassword(password); // 密码
        //  dataSourceConfig.setSchemaName("public"); //设置schema


        /*
         * -----------------------------------
         *           数据源配置
         * -----------------------------------
         **/
        PackageConfig packageConfig = new PackageConfig();
        autoGenerator.setPackageInfo(packageConfig);

        packageConfig.setParent(packageName); // 包名
        packageConfig.setModuleName(packageModel); // 模块名
        packageConfig.setEntity(objectName); // po
        packageConfig.setService(serviceName);  //ser
        packageConfig.setServiceImpl(serviceImplName); //impl
        packageConfig.setController(controlName); // con
        packageConfig.setMapper(daoClassName);


        /*
         * -----------------------------------
         *           自定义配置
         * -----------------------------------
                 <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
         **/
        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {
                // TODO
            }
        };
        autoGenerator.setCfg(injectionConfig);

        List<FileOutConfig> focList = new ArrayList<>(); // 自定义输出配置
        injectionConfig.setFileOutConfigList(focList); // 设置输出

        // 模板引擎
        String templatePath = "/templates/mapper.xml.ftl";
        focList.add(new FileOutConfig(templatePath) {  // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return generationDir + "/src/main/resources/" + daoResName + "/" + packageConfig.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        /*
                cfg.setFileCreate(new IFileCreate() {
                    @Override
                    public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                        // 判断自定义文件夹是否需要创建
                        checkDir("调用默认方法创建的目录,自定义目录用");
                        if (fileType == FileType.MAPPER) {
                            // 已经生成 mapper 文件判断存在,不想重新生成返回 false
                            return !new File(filePath).exists();
                        }
                        // 允许生成模板文件
                        return true;
                    }
                });
                */




        /*
         * -----------------------------------
         *           模板配置
         * -----------------------------------
         **/
        TemplateConfig templateConfig = new TemplateConfig();
        autoGenerator.setTemplate(templateConfig);

        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
        /* templateConfig.setEntity("templates/entity2.java");
         templateConfig.setService();
         templateConfig.setController();*/

        templateConfig.setXml(null);


        /*
         * -----------------------------------
         *          策略配置
         * -----------------------------------
         **/
        StrategyConfig strategy = new StrategyConfig();
        autoGenerator.setStrategy(strategy);


        List<TableFill> tableFills = new ArrayList<>();
        tableFills.add(new TableFill(createTime == null ? "code_generator$not_creatime" : createTime,
                FieldFill.INSERT));
        tableFills.add(new TableFill(updateTime == null ? "code_generator$not_updatime" : updateTime,
                FieldFill.INSERT_UPDATE));

        strategy.setTablePrefix(tablePrefix);  // 表前缀
        strategy.setTableFillList(tableFills);  //字段填充
        strategy.setInclude(tableName);  // 表
        strategy.setLogicDeleteFieldName(logicDelteName); // 逻辑删除
        strategy.setVersionFieldName(versionName); // 乐观锁
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值