使用mybatis-plus-generator简单实现自动代码生成,记录下后面好直接使用。
maven添加com.baomidou mybatis-plus-generator 3.5.1 com.baomidou mybatis-plus-core 3.5.1 mysql mysql-connector-java 8.0.27 org.springframework.boot spring-boot-starter-freemarker 2.7.0
GeneratorUtils相关内容:
package top.smartly.common.utils.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class GeneratorUtils {
private static final String baseProjectPath = "D:\";
private static final String basePackage = "top.smartly";
private final String authorName = "";
private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/sca?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
//忽略的表名
private static final List TABLES_EXCLUDE = Arrays.asList("");;
static String s = "sca_product_01";
//需要生成代码的表名
private static final List TABLES_INFLUD = Arrays.stream(s.split(",")).collect(Collectors.toList());
public static void main(String[] args) throws ClassNotFoundException, SQLException {
if (TABLES_INFLUD.size() > 0) {
new GeneratorUtils().generateByTables(basePackage, TABLES_INFLUD);
} else {
Class.forName(DRIVER_NAME);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
ResultSet tables = connection.getMetaData().getTables(null, null, "%", new String[]{"TABLE"});
List t = new ArrayList<>();
while (tables.next()) {
String tableName = tables.getString("table_name");
if (TABLES_EXCLUDE.contains(tableName)) {
continue;
}
t.add(tableName);
}
System.out.println(Arrays.toString(t.toArray()));
new GeneratorUtils().generateByTables(basePackage, t);
}
}
private void generateByTables(String packageName, List tables) {
DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(URL, USERNAME, PASSWORD)
.dbQuery(new MySqlQuery())
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
GlobalConfig globalConfig = new GlobalConfig.Builder()
.fileOverride()
.outputDir(baseProjectPath)
.author(authorName)
// .enableKotlin()
// .enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd")
.build();
PackageConfig packageConfig = new PackageConfig.Builder()
.parent(basePackage)
.moduleName("chapter")
.entity("model.entity")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.other("other")
// .pathInfo(Collections.singletonMap(OutputFile.mapperXml, baseMapperXmlPath))
.build();
TemplateConfig templateConfig = new TemplateConfig.Builder().build();
//注入配置
// InjectionConfig injectionConfig = new InjectionConfig.Builder()
// //输出文件之前消费者
// .beforeOutputFile((tableInfo, objectMap) -> {
// System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
// })
// .customMap(Collections.singletonMap("test", "baomidou"))
// .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
// .build();
StrategyConfig strategyConfig = new StrategyConfig.Builder()
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
// .likeTable(new LikeTable("USER"))
.addInclude(tables.toArray(new String[0]))
.addTablePrefix("sca_")
.entityBuilder()
.enableLombok()
.enableRemoveIsPrefix()
// .enableTableFieldAnnotation()
.idType(IdType.AUTO)
.naming(NamingStrategy.underline_to_camel)
// .addFieldSuffix("_flag")
.mapperBuilder()
.enableMapperAnnotation()
.build();
new AutoGenerator(dataSourceConfig)
.global(globalConfig)
.packageInfo(packageConfig)
.strategy(strategyConfig)
.template(templateConfig)
.execute(new FreemarkerTemplateEngine());
}
}



