随着编码工具的越来越便捷与强大, 越来越多的重复性工作被工具自动化所代替,
(研发工具的程序员正在一点一点干掉编写普通业务类代码的程序员,尤其是企业级小微级项目开发, 便捷了高效了,不进步慢慢就被替代了, 相煎何太急啊!)
好了,其他的就不多说了,下面要记录的是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();
}
}
可以直接使用, 执行结果如下图
上面这些就是官网自动生成的文件信息与内容了, 目前我使用的mybaitsPlus版本中提供了17个常用常规方法, 上述生成的代码中, 只需要在controller层添加控制器方法与路径,就可直接使用了,是不是太方便了,
下面是自定义文件部分, 只放上来一个实体类生成文件用于记录相关使用到的标签引用等
文件存放地址:
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都不要 ---------------
}
各种自动化配置在官网中均有介绍哦!