前言:为了大大的提高开发人员的效率mybais-plus拥有自己的对数据库表生成实体类的一种方式这个工具称为代码生成器。
代码生成器的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
代码生成器代码
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.MySqlTypeConvert;
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 com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
import java.util.Scanner;
public class CodeGenerator {
/**
* <p>
* 读取控制台内容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
AutoGenerator autoGenerator = new AutoGenerator();
// 设置数据源
autoGenerator.setDataSource(new DataSourceConfig()
.setDriverName("com.mysql.cj.jdbc.Driver")
// 设置数据库类型,根据自己的数据库完善下面信息,这样代码生成器会与数据库进行一个对接
.setDbType(DbType.MYSQL)
.setUsername("root")
.setPassword("123456")
.setUrl("jdbc:mysql://localhost:3306/name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT")
.setTypeConvert(new MySqlTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("转换类型:" + fieldType);
String t = fieldType.toLowerCase();
if (t.contains("tinyint(1)")) {
return DbColumnType.INTEGER;
}
return super.processTypeConvert(globalConfig, fieldType);
}
})
);
String projectPath = System.getProperty("user.dir");
// 全局配置
autoGenerator.setGlobalConfig(new GlobalConfig()
// 输出目录
.setOutputDir(projectPath+ "/src/main/java")
// 是否覆盖
.setFileOverride(false)
//swagger注解
.setSwagger2(true)
//时间格式
.setDateType(DateType.ONLY_DATE)
// 开启AR模式
.setActiveRecord(false)
// XML二级缓存
.setEnableCache(false)
// 生成ResultMap
.setBaseResultMap(true)
// 生成 sql片段
.setBaseColumnList(true)
// 自动打开生成后的文件夹
.setOpen(false)
// 所有文件的生成者
.setAuthor("feizaishui")
// // 自定义文件命名,%s会自动填充表实体类名字
.setMapperName("%sDao")
// .setXmlName("%sMapper")
// .setServiceName("I%sService")
// .setServiceImplName("%sServiceImpl")
// .setControllerName("%sController")
);
// 包配置
PackageConfig packageConfig = new PackageConfig()
// 基本包路径,如果多模块要切换不同的地址
.setParent("com.netx")
.setModuleName(scanner("模块名"))
// 设置Mapper包名
.setMapper("dao");
// // 设置Controller包名
// .setController("controller")
// // 设置entity包名
// .setEntity("entity")
// // 设置Service包名
// .setService("service")
// // 设置Service实现类包名
// .setServiceImpl("service.impl");
autoGenerator.setPackageInfo(packageConfig);
// 策略配置
autoGenerator.setStrategy(new StrategyConfig()
// 需要生成的表
.setInclude(scanner("表名"))
// 实体类使用Lombok
.setEntityLombokModel(true)
// 表名生成策略,下划线转驼峰
.setNaming(NamingStrategy.underline_to_camel)
.setColumnNaming(NamingStrategy.underline_to_camel)
.setSuperEntityClass("com.netx.clothing.entity.BaseEntity")
.setSuperEntityColumns("id","deleted","create_time","update_time")
.setRestControllerStyle(true)
.setControllerMappingHyphenStyle(true)
.setLogicDeleteFieldName("deleted")
);
// 注入自定义配置
autoGenerator.setCfg(new InjectionConfig() {
@Override
public void initMap() {
// Map<String, Object> map = new HashMap<>(1);
// map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
// this.setMap(map);
}
}.setFileOutConfigList(Collections.singletonList(
new FileOutConfig("/templates/mapper.xml.ftl") {
// 自定义Mapper.xml输出路径
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/resources/mapper/" + packageConfig.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
})));
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
//templateConfig.setService(null);
//templateConfig.setController(null);
templateConfig.setXml(null);
autoGenerator.setTemplate(templateConfig);
autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
autoGenerator.execute();
}
}