import com.baomidou.mybatisplus.annotation.DbType;
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.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
@Component
public class PlusGenerator {
//连接数据库
private static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/myproject?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai";
//用户名
private static final String USER_NAME = "root";
//密码
private static final String PASSWORD = "123456";
//数据库驱动名称
private static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
private static Environment env;
@Autowired
public void set(Environment env) throws IOException {
PlusGenerator.env = env;
}
/**
* @param author 作者
* @param packageName 包名
* @param dbType 数据库类型(mysql、oracle)
* @param tableName 表名
*/
public static void generatorByType(String author, String packageName,String dbType, String ... tableName) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
System.out.println(PlusGenerator.class.getClassLoader().getResource("").getPath()+ "/codeGenerator");
gc.setOutputDir(PlusGenerator.class.getClassLoader().getResource("").getPath()+ "/codeGenerator");
gc.setFileOverride(true);
// ActiveRecord特性
gc.setActiveRecord(true);
// XML 二级缓存
gc.setEnableCache(false);
//XML ResultMap
gc.setBaseResultMap(true);
//XML columList
gc.setBaseColumnList(true);
gc.setDateType(DateType.ONLY_DATE);
if(StringUtils.isBlank(author)){
author = "tastyb";
}
gc.setAuthor(author);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.getDbType(dbType));
dsc.setTypeConvert(new OracleTypeConvert(){
// 自定义数据库表字段类型转换【可选】
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("转换类型:" + fieldType);
// 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
return super.processTypeConvert(gc, fieldType);
}
});
dsc.setDriverName(DRIVER_CLASS_NAME);
dsc.setUsername(USER_NAME);
dsc.setPassword(PASSWORD);
dsc.setUrl(DB_URL);
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
//strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 修改为表前缀
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(tableName); // 需要生成的表
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(packageName);
pc.setController("controller");
pc.setEntity("entity");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
// 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
TemplateConfig tc = new TemplateConfig();
tc.setController("/templates/vm/controller.java.vm");
tc.setService("/templates/vm/service.java.vm");
tc.setServiceImpl("/templates/vm/serviceImpl.java.vm");
tc.setEntity("/templates/vm/entity.java.vm");
tc.setMapper("/templates/vm/mapper.java.vm");
// 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
mpg.setTemplate(tc);
// 注入自定义配置,可以在 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);
}
};
mpg.setCfg(cfg);
// 执行生成
mpg.execute();
// 打印注入设置【可无】
System.err.println("代码生成成功!!");
}
public static void main(String[] args) {
PlusGenerator.generatorByType("tastyb", "com.example.myproject","mysql", "sys_role_menu");
}
}