java springboot+mybaitsPlus 自动化生成代码, 自定义生成

随着编码工具的越来越便捷与强大, 越来越多的重复性工作被工具自动化所代替,
(研发工具的程序员正在一点一点干掉编写普通业务类代码的程序员,尤其是企业级小微级项目开发, 便捷了高效了,不进步慢慢就被替代了, 相煎何太急啊!)
好了,其他的就不多说了,下面要记录的是springboot+mybatisPlus自动化生成代码, 官网中有完整的例子, 咱也就不在这里赘述了, 想更深入研究了解的可以直接查看官网https://mp.baomidou.com/guide/generator.html
那为什么还要写这篇文章呢?
两个问题
1. 自己做一下记录,以后需要了可以直接使用
2. 做了一部分自定义文件配置

直接上代码
首先需要在文件中引入相关包文件


	com.baomidou
	mybatis-plus-generator
	3.1.1



	org.freemarker
	freemarker
	2.3.28


	org.apache.velocity
	velocity-engine-core
	2.2

上述引入包中根据需要选择freemarker或velocity任意一种, 这两个只有自定义时才会用到,自动化生成不需要引入这两个包
freemarker模板扫描的文件是.ftl
velocity模板扫描的文件是.vm (不设置是默认为velocity)

package com.example.myplusdemo.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.HashMap;
import java.util.Map;

public class CodeGenerator {

    /**
     *
     * @Title: main
     * @Description: 生成
     * @param args
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        //mpg.setTemplateEngine(new FreemarkerTemplateEngine()); .ftl模板
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("E://workspace//myplusdemo11//src//main//java");
        gc.setFileOverride(false);
        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(true);// XML columList
        gc.setAuthor("lcx");// 作者

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sDao");
        gc.setXmlName("%sMapper");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("用户名");
        dsc.setPassword("密码");
        dsc.setUrl("地址");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(new String[] { "activity"}); // 需要生成的表 单个
 		//strategy.setInclude(new String[] { "activity", "activity_theme"});需要生成的表 多个
 
        strategy.setSuperServiceClass(null);
        strategy.setSuperServiceImplClass(null);
        strategy.setSuperMapperClass(null);
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.myplusdemo");
        pc.setController("controller");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setMapper("dao");
        pc.setEntity("entity");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
            Map map = new HashMap<>();
            map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
            this.setMap(map);

            //entity2.java.vm
            //自定义属性注入abc=$!{cfg.abc}
            }
        };
        mpg.setCfg(cfg);
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
        //TemplateConfig tc = new TemplateConfig(); tc.setXml(null); mpg.setTemplate(tc);
        TemplateConfig tc = new TemplateConfig();

        //tc.setEntity("/templates/service");
        //tc.setService("/templates/service");
        /*tc.setController("");///templates/Controller.java
        tc.setMapper("");
        tc.setXml("");
        tc.setService("");
        tc.setServiceImpl("");*/
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        mpg.setTemplate(tc);
        // 执行生成
        mpg.execute();
    }
}

可以直接使用, 执行结果如下图
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第1张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第2张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第3张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第4张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第5张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第6张图片
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第7张图片
上面这些就是官网自动生成的文件信息与内容了, 目前我使用的mybaitsPlus版本中提供了17个常用常规方法, 上述生成的代码中, 只需要在controller层添加控制器方法与路径,就可直接使用了,是不是太方便了,

下面是自定义文件部分, 只放上来一个实体类生成文件用于记录相关使用到的标签引用等
文件存放地址:
java springboot+mybaitsPlus 自动化生成代码, 自定义生成_第8张图片

package ${package.Entity};

#foreach($pkg in ${table.importPackages})
#if($pkg == "java.time.LocalDateTime")
import java.util.Date;
#else
import ${pkg};
#end
#end
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;

## 表备注,作者,日期
/**
 * $!{table.comment}
 * @author ${author}
 * @since ${date}
 */
@TableName("${table.name}")
@Data
public class ${entity} implements Serializable {

## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
## 主键策略
#if(${field.keyFlag})
    #if(${field.keyIdentityFlag})
    @TableId(value = "${field.name}", type = IdType.AUTO)
    #elseif(!$null.isNull(${idType}) && "$!idType" != "")
    @TableId(value = "${field.name}", type = IdType.${idType})
    #elseif(${field.convert})
    @TableId("${field.name}")
    #end
#end
    /**
     * ${field.comment};
     */
#if(${field.propertyType} == "LocalDateTime")
    private Date ${field.propertyName};
#else
    private ${field.propertyType} ${field.propertyName};
#end

#end
## ----------  END 字段循环遍历  ----------
## ---------- 使用的lombok,所以后面的get/set都不要 ---------------
}

各种自动化配置在官网中均有介绍哦!

你可能感兴趣的:(生成代码,自定义生成代码)