记一次mybatisplus generator生成器使用的踩坑,在springboot项目中使用mybatisplus generator。
问题描述
之前使用mysql数据库时,生成器一直正常,现在项目有需要,切换成oracle数据库后,使用生成器生成表对应的实体时,运行生成器后,控制台提示:
com.baomidou.mybatisplus.generator.AutoGenerator - 文件生成完成!!!
解决方案
实际却只生成了目录,没有生成文件,排查了生成器配置,均未发现问题,最后神奇的发现发现如果是oracle数据库时,表名需要大写,重要的事情说三遍:
表名需要大写、表名需要大写、表名需要大写
希望可以帮到和我一样踩坑的小伙伴,如果感觉有用,可以一键三连,关注下博主。
示例代码
package codegen;
import com.baomidou.mybatisplus.annotation.DbType;
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.builder.ConfigBuilder;
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 java.util.ArrayList;
import java.util.List;
public class CodeGenerator {
/**
* 一定要谨慎运行!!!!防止之前的代码被覆盖
*
* @param args
*/
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("ins.console");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("wen");
gc.setOpen(false);// 是否打开输出目录
gc.setBaseResultMap(true);// 生成resultMap
gc.setBaseColumnList(true);// //在xml中生成基础列
gc.setMapperName("%sDao");// mapper命名方式
gc.setXmlName("%sMapper");// Mapper xml命名方式
// gc.setIdType(IdType.AUTO);// 生成主键的方式-默认使用自增,可以自己修改
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.ORACLE);
dsc.setUrl("jdbc:oracle:thin:@xxxx:1521:xxxx");
dsc.setDriverName("oracle.jdbc.driver.OracleDriver");
dsc.setUsername("xxxx");
dsc.setPassword("xxxx");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("mallgoods");
pc.setParent("ins.console");
pc.setEntity("po"); // Entity包名
pc.setMapper("dao"); // Mapper包名
pc.setXml(null); // Mapper XML包名
mpg.setPackageInfo(pc);
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/base/" + pc.getModuleName() + "/"
+ tableInfo.getEntityName() + "BaseDao" + StringPool.DOT_XML;
}
});
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
if (fileType == FileType.OTHER || fileType == FileType.ENTITY || fileType == FileType.MAPPER/*dao*/ || fileType == FileType.XML) {
return true;
} else {
return false;
}
// return true;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
templateConfig.setController(null);
templateConfig.setService(null);
templateConfig.setServiceImpl(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// 需要生成的表
/*String[] tables = {
"","","","",""
};*/
String[] tables = {
"MALL_GOODS"
};
strategy.setInclude(tables);
strategy.setNaming(NamingStrategy.underline_to_camel);
// strategy.setTablePrefix("t_");
NamingStrategy columnNameStrategy = NamingStrategy.underline_to_camel;
strategy.setColumnNaming(columnNameStrategy);
strategy.setEntityLombokModel(true);// 是否为lombok模型(默认 false)
strategy.setEntityTableFieldAnnotationEnable(true);
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
try {
mpg.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}