mybatis plus代码生成器
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.OracleTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
/**
* 代码生成器
*/
public class MpGenerator {
/**
* 生成指定表(为空则表示生成所有) 和 排除指定表 只能一个生效
*/
private static final String INCLUDE_TABLE = "tableName";
/**
* 是否是第一次生成 因修改了数据库生成只需要生成 xml 和 entity
*/
private static final boolean ISFIRST = true;
/**
* 排除指定表(为空则表示不排除) 和 生成指定表 只能一个生效
*/
private static final String EXCLUDE_TABLE = "";
/**
* 代码注释作者
*/
private static final String AUTHOR = "zhangdan";
private static final String PACKAGE_NAME = "com.zhangdan";
/**
*
*/
private static String PRODUCT_PATH = System.getProperty("user.dir");
/**
* entity/mapper 等代码生成路径
*/
private static String OUTPUT_ENTITY = PRODUCT_PATH.concat("\\src\\main\\java\\");
/**
* mapper xml所在地址
*/
private static String OUTPUT_MAPPERXML = PRODUCT_PATH.concat("\\src\\main\\resources\\mapper\\");
private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
/**
* 数据库信息
*/
private static final String USERNAME = "ai_iot";
private static final String PASSWORD = "OOoo0000!";
private static final String URL = "jdbc:mysql://ip:port/garbage_monitor?characterEncoding=utf-8&useUnicode=true&characterEncoding=UTF-8&useSSL=false";
public static void main(String[] args) {
//需要构建一个 代码自动生成器 对象
// 代码生成器
final AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(buildGlobalConfig());
// 数据源配置
mpg.setDataSource(buildDataSourceConfig());
// 包配置
mpg.setPackageInfo(buildPackageConfig());
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templateXmlPath = "/templates/mapper.xml.ftl";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templateXmlPath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return OUTPUT_MAPPERXML + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
//不生成mapper xml文件,由上面控制生成位置
templateConfig.setXml(null);
if (!ISFIRST) {
templateConfig.setService(null);
templateConfig.setServiceImpl(null);
templateConfig.setController(null);
templateConfig.setMapper(null);
}
mpg.setTemplate(templateConfig);
// 策略配置
mpg.setStrategy(buildStrategyConfig());
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
/**
* 全局构造配置类
*
* @return
*/
private static GlobalConfig buildGlobalConfig() {
// 全局配置
GlobalConfig gc = new GlobalConfig();
//设定数据库主键生成策略,会给实体类加TableId注解
gc.setIdType(IdType.INPUT);
//项目所在地址
gc.setOutputDir(OUTPUT_ENTITY);
//注释作者
gc.setAuthor(AUTHOR);
//生成文件不打开
gc.setOpen(false);
gc.setFileOverride(true);
gc.setActiveRecord(true);
// XML 二级缓存
gc.setEnableCache(false);
//生成result map
// XML ResultMap
gc.setBaseResultMap(true);
//生成java mysql字段映射
// XML columList
gc.setBaseColumnList(true);
gc.setSwagger2(true); // 实体属性 Swagger2 注解
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
return gc;
}
/**
* 数据库配置信息
*
* @return
*/
private static DataSourceConfig buildDataSourceConfig() {
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(URL);
dsc.setDriverName(DRIVER_NAME);
dsc.setUsername(USERNAME);
dsc.setPassword(PASSWORD);
dsc.setTypeConvert(new OracleTypeConvert() {
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
//将数据库中timestamp转换成date
if (fieldType.toLowerCase().contains("timestamp") || fieldType.toLowerCase().contains("date")) {
return DbColumnType.DATE;
}
//将数据库中timestamp转换成date
if (fieldType.toLowerCase().contains("int")) {
return DbColumnType.INTEGER;
}
//将数据库中double转换成Double
if (fieldType.toLowerCase().contains("double")) {
return DbColumnType.DOUBLE;
}
if (fieldType.toLowerCase().contains("clob")) {
return DbColumnType.STRING;
}
if (fieldType.toLowerCase().contains("decimal")) {
return DbColumnType.BIG_DECIMAL;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
return dsc;
}
private static PackageConfig buildPackageConfig() {
PackageConfig pc = new PackageConfig();
pc.setParent(PACKAGE_NAME);
pc.setEntity("entity");
pc.setXml("mapper");
pc.setController("controller");
pc.setService("service");
return pc;
}
private static StrategyConfig buildStrategyConfig() {
StrategyConfig strategy = new StrategyConfig();
// 命名规则
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 默认生成的po类不继承,手动修改继承
//strategy.setSuperEntityClass((String) null);
// 实体是否使用Lombok插件
strategy.setEntityLombokModel(true);
// 自定义 service 父类
//strategy.setSuperServiceClass("com.h2t.study.BaseService");
// 自定义 service 实现类父类
//strategy.setSuperServiceImplClass("com.h2t.study.BaseServiceImpl");
// 控制层是否使用Rest风格
strategy.setRestControllerStyle(true);
if (!com.baomidou.mybatisplus.core.toolkit.StringUtils.isEmpty(EXCLUDE_TABLE)) {
//去除无效表 -- 可不指定
strategy.setExclude(EXCLUDE_TABLE.split(","));
}
if (!StringUtils.isEmpty(INCLUDE_TABLE)) {
//只生成指定表(和上面同时只能选一个)
strategy.setInclude(INCLUDE_TABLE.split(","));
}
return strategy;
}
}