使用mybatis-plus 自动生成器生成代码
写这篇文章主要是想把自己的代码找个地方保存,此生成器代码规则不一定适合大家
maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
java代码
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.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.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: 沐梓
* @time: 2020/8/27 10:07
*/
public class CodeGenerator {
public static final String DRIVER = "your database driver";
public static final String URL = "your database url";
public static final String USERNAME = "your username";
public static final String PASSWORD = "your password";
/**
* @return com.baomidou.mybatisplus.generator.config.GlobalConfig
* @Author 沐梓
* @Description //TODO 全局配置
* @Date 9:14 2020/8/28
* @Param [oPath]
**/
public static GlobalConfig getGlobalConfig(String oPath) {
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(oPath + "/src/main/java");
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(true);// XML columList
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setOpen(false);//完成后不打开输入目录
return gc;
}
/**
* @return com.baomidou.mybatisplus.generator.config.DataSourceConfig
* @Author 沐梓
* @Description //TODO 获取驱动连接数据库,配置数据库字段映射问题
* @Date 9:14 2020/8/28
* @Param []
**/
public static DataSourceConfig getDataSourceConfig() {
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName(DRIVER);
dsc.setUrl(URL);
dsc.setUsername(USERNAME);
dsc.setPassword(PASSWORD);
//自定义数据库类型转实体类类型
dsc.setTypeConvert(new MySqlTypeConvert() {
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
//bit转换成Boolean
if (fieldType.toLowerCase().contains("bit")) {
return DbColumnType.BOOLEAN;
}
if (fieldType.toLowerCase().contains("bigint")) {
return DbColumnType.LONG;
}
//将数据库中datetime转换成date
if (fieldType.toLowerCase().contains("datetime")) {
return DbColumnType.DATE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
return dsc;
}
/**
* @return com.baomidou.mybatisplus.generator.config.StrategyConfig
* @Author 沐梓
* @Description //TODO 策略配置,主要配置需要生成那些实体类的表,定义某些字段是自定义填充字段,实体类字段注解
* @Date 9:17 2020/8/28
* @Param []
**/
public static StrategyConfig getStrategyConfig() {
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix(new String[]{"act", "crm"});// 此处可以修改为您的表前缀
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
//strategy.setInclude(new String[]{"test"}); // 需要生成的表
//strategy.setControllerMappingHyphenStyle();
strategy.setSuperEntityClass(BaseModel.class);
strategy.setSuperServiceClass(BaseService.class);
strategy.setSuperServiceImplClass(BaseServiceImpl.class);
strategy.setEntityLombokModel(true);//开启lombok注解
strategy.setEntityTableFieldAnnotationEnable(true);//是否生成实体时,生成字段注解
//设置某些字段为自定义填充字段
List<TableFill> tableFills = new ArrayList<>();
tableFills.add(new TableFill("create_date", FieldFill.INSERT));
tableFills.add(new TableFill("last_modify_date", FieldFill.INSERT_UPDATE));
tableFills.add(new TableFill("version", FieldFill.INSERT_UPDATE));
strategy.setTableFillList(tableFills);
return strategy;
}
/**
* @Author 沐梓
* @Description //TODO 自定义配置
* @Date 10:54 2020/8/28
* @Param [oPath]
* @return com.baomidou.mybatisplus.generator.InjectionConfig
**/
public static InjectionConfig getInjectionConfig(String oPath){
//自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
//自定义输出配置,这里配置了xml生成的路径
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 ,如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return oPath + "/src/main/resources/mapper"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
return cfg;
}
public static void main(String[] args) throws IOException {
//声明自动生成对象
AutoGenerator mpg = new AutoGenerator();
//默认定位到的当前用户目录("user.dir")(即工程根目录)
//JVM就可以据"user.dir" + "你自己设置的目录" 得到完整的路径(即绝对路径)
//这有个前提,你的工程不是web项目,不然,这个返回值就不是项目的根目录啦,是tomcat的bin目录。web的父子工程,就需要加子项目的项目名称
String oPath = System.getProperty("user.dir") + "/your projectname";
//获取全局配置
GlobalConfig gc = getGlobalConfig(oPath);
//获取数据源
DataSourceConfig dsc = getDataSourceConfig();
mpg.setDataSource(dsc);
//使用VelocityTemplateEngine
VelocityTemplateEngine velocityTemplateEngine = new VelocityTemplateEngine();
//获取自定义配置
InjectionConfig cfg = getInjectionConfig(oPath);
mpg.setCfg(cfg);
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
StrategyConfig strategy = getStrategyConfig();
PackageConfig pc = new PackageConfig();
pc.setParent("com.xxx.xxx.generator");
pc.setEntity("model"); //实体类包名,默认为entity
mpg.setDataSource(dsc); //数据源配置
mpg.setGlobalConfig(gc); //全局配置
mpg.setStrategy(strategy); //生成策略配置
mpg.setPackageInfo(pc); //包配置
mpg.setTemplateEngine(velocityTemplateEngine);
// 执行生成
mpg.execute();
}
}
最后贴上mybatis-plus代码生成器配置说明地址
to:mybatis-plus-generator