使用mybatis-plus-generator简单实现自动代码生成,记录下后面好直接使用。
maven添加
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
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";
/**
* author
*/
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<String> TABLES_EXCLUDE = Arrays.asList("");;
static String s = "sca_product_01";
//需要生成代码的表名
private static final List<String> 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<String> 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<String> tables) {
DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(URL, USERNAME, PASSWORD)
/*myslq数据库*/
.dbQuery(new MySqlQuery())
/*数据库类型转化器*/
.typeConvert(new MySqlTypeConvert())
/*数据库关键字处理*/
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
GlobalConfig globalConfig = new GlobalConfig.Builder()
/*覆盖已经生成的文件 默认是false*/
.fileOverride()
/*指定输出目录*/
.outputDir(baseProjectPath)
/*作者名称*/
.author(authorName)
/*开启kotlin模式*/
// .enableKotlin()
/*开始swagger*/
// .enableSwagger()
/*DateType.ONLY_DATE 默认值: DateType.TIME_PAC*/
.dateType(DateType.TIME_PACK)
/* 默认值: yyyy-MM-dd*/
.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());
}
}