package com.company.project.generator; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; 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.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.IColumnType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyBatisPlusGeneratorAnt { public static void main(String[] args) { String projectPath = System.getProperty("user.dir"); // 自定义需要填充的字段 List<TableFill> tableFillList = new ArrayList<TableFill>(); //如 每张表都有一个创建时间、修改时间 //而且这基本上就是通用的了,新增时,创建时间和修改时间同时修改 //修改时,修改时间会修改, //虽然像Mysql数据库有自动更新几只,但像ORACLE的数据库就没有了, //使用公共字段填充功能,就可以实现,自动按场景更新了。 //如下是配置 TableFill sysCreateTime = new TableFill("create_time", FieldFill.INSERT); TableFill sysUpdateTime = new TableFill("update_time", FieldFill.UPDATE); TableFill sysCreateBy = new TableFill("create_by", FieldFill.INSERT); TableFill sysUpdateBy = new TableFill("update_by", FieldFill.UPDATE); tableFillList.add(sysCreateTime); tableFillList.add(sysUpdateTime); tableFillList.add(sysCreateBy); tableFillList.add(sysUpdateBy); // 1. 全局配置 GlobalConfig config = new GlobalConfig(); // 是否支持AR模式 config.setActiveRecord(true) // 作者 .setAuthor("test@company.com") // 生成路径 .setOutputDir(projectPath + "/src/main/java/") // 文件覆盖 .setFileOverride(true) // 主键策略 .setIdType(IdType.AUTO) // 设置生成的service接口的名字的首字母是否为I,例如IEmployeeService .setServiceName("%sService") //生成基本的resultMap .setBaseResultMap(true) //生成基本的SQL片段 .setBaseColumnList(true) //生成后打开文件夹 .setOpen(false).setDateType(DateType.ONLY_DATE); // 2. 数据源配置 DataSourceConfig dsConfig = new DataSourceConfig(); // 设置数据库类型 dsConfig.setDbType(DbType.MYSQL) .setDriverName("com.mysql.cj.jdbc.Driver") .setUrl("jdbc:mysql://localhost:3306/test") .setUsername("root") .setPassword("root") .setTypeConvert(new MySqlTypeConvert() { // 自定义数据库表字段类型转换【可选】 @Override public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { System.out.println("转换类型:" + fieldType); if (fieldType.toLowerCase().contains("tinyint")) { return DbColumnType.INTEGER; } return super.processTypeConvert(globalConfig, fieldType); } }); // 3. 策略配置globalConfiguration中 StrategyConfig stConfig = new StrategyConfig(); // 全局大写命名 stConfig.setCapitalMode(true) // 指定表名 字段名是否使用下划线 //.setDbColumnUnderline(true) // 数据库表映射到实体的命名策略 .setNaming(NamingStrategy.underline_to_camel) //.setTablePrefix("tbl_") // 生成的表 .setInclude(new String[] { "table_teacher","table_student" }) .setEntityBooleanColumnRemoveIsPrefix(false) // 自定义实体,公共字段 .setTableFillList(tableFillList); // 4. 包名策略配置 PackageConfig pkConfig = new PackageConfig(); pkConfig.setParent("com.company.project.api") //dao .setMapper("repository.mysql.mapper") //servcie .setService("service") //controller .setController("web") .setEntity("repository.mysql.domain") //mapper.xml .setXml("repository.mysql.mybatis"); // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { Map<String, Object> map = new HashMap<>(); map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp"); this.setMap(map); } }; // 自定义输出文件目录 List<FileOutConfig> focList = new ArrayList<>(); // 调整xml生成目录演示 focList.add(new FileOutConfig("/templates/mapper.xml.vm") { @Override public String outputFile(TableInfo tableInfo) { return projectPath + "/src/main/resources/META-INF/mybatis/" + tableInfo.getEntityName() + "Mapper.xml"; } }); cfg.setFileOutConfigList(focList); // 关闭默认生成,如果设置空 OR Null 将不生成该模块。 TemplateConfig tc = new TemplateConfig(); tc.setController(null); tc.setXml(null); // 5. 整合配置 AutoGenerator ag = new AutoGenerator(); ag.setGlobalConfig(config) .setDataSource(dsConfig) .setStrategy(stConfig) .setPackageInfo(pkConfig) .setCfg(cfg) .setTemplate(tc); // 6. 执行 ag.execute(); } }