Mybatis Flex代码生成器抽象类
目录
mybatis-flex代码生成器抽象类
添加依赖
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-processor</artifactId>
<version>1.6.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-codegen</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
代码生成器抽象类
package cn.com.wuhm.mybatis.flex.utils;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.*;
import com.mybatisflex.codegen.dialect.JdbcTypeMapping;
import com.mybatisflex.codegen.template.impl.EnjoyTemplate;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.util.StringUtils;
import javax.sql.DataSource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 对代码生成器的封装抽象类
* @Description
* @Author wuhuaming
* @Date 2023/8/30
*/
public abstract class AbstractFlexCodegen {
/**
* 代码生成
*/
public void codegen(){
Generator generator = new Generator(this.getDatasource(), this.createGlobalConfig());
generator.generate();
}
private GlobalConfig createGlobalConfig(){
//创建配置内容
GlobalConfig globalConfig = new GlobalConfig();
// 设置注释配置
this.setJavadocConfig(globalConfig);
// 设置包配置
this.setPackageConfig(globalConfig);
// 设置策略配置
this.setStrategyConfig(globalConfig);
// 设置模板配置
this.setTemplateConfig(globalConfig);
// 设置entity配置
this.setEntityConfig(globalConfig);
// 设置mapper配置
this.setMapperConfig(globalConfig);
// 设置mapperXml配置
this.setMapperXmlConfig(globalConfig);
// 设置service配置
this.setServiceConfig(globalConfig);
// 设置serviceImpl配置
this.setServiceImplConfig(globalConfig);
// 设置controller配置
this.setControllerConfig(globalConfig);
// 设置TableDef配置
this.setTableDefConfig(globalConfig);
// 设置全局列配置
this.setGlobalColumnConfig(globalConfig);
// 配置全局字段映射
this.jdbcTypeMapping();
// 设置要生成的模块
this.setGlobalGenFile(globalConfig);
return globalConfig;
}
/**
* 获取数据源
* @return
*/
private DataSource getDatasource(){
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(this.getUrl());
dataSource.setUsername(this.getUsername());
dataSource.setPassword(this.getPassword());
return dataSource;
}
/**
* 包配置信息
* @return
*/
private void setPackageConfig(GlobalConfig globalConfig){
PackageConfig packageConfig = globalConfig.getPackageConfig();
// 基础包名
packageConfig.setBasePackage(this.basePackage());
if(this.isMultiModule() && StringUtils.hasText(this.multiModuleName())){
// 设置多模块名的生成路径
packageConfig.setSourceDir(System.getProperty("user.dir") + "/" + this.isMultiModule() + "/src/main/java");
}
}
/**
* 是否多模块工程
* @return
*/
protected boolean isMultiModule(){
return false;
}
/**
* 多模块名称
* @return
*/
protected String multiModuleName(){
return "";
}
/**
* 设置注释
* @param globalConfig
*/
private void setJavadocConfig(GlobalConfig globalConfig){
JavadocConfig javadocConfig = globalConfig.getJavadocConfig();
javadocConfig.setAuthor("mybatis-flex");
// javadocConfig.setSince();
}
/**
* 包生成策略
* @return
*/
private void setStrategyConfig(GlobalConfig globalConfig){
StrategyConfig strategyConfig = globalConfig.getStrategyConfig();
strategyConfig.setTablePrefix(this.tablePrefix());
strategyConfig.setGenerateTable(this.tables());
}
/**
* 生成的表前缀
* @return
*/
protected String tablePrefix(){
return null;
}
/**
* 模板配置
* @param globalConfig
*/
private void setTemplateConfig(GlobalConfig globalConfig){
TemplateConfig templateConfig = globalConfig.getTemplateConfig();
// 这里可以指定模板的类型有Freemarker,EnjoyTemplate(Flex自带的)
templateConfig.setTemplate(new EnjoyTemplate());
}
/**
* 实体类配置
* @param globalConfig
*/
private void setEntityConfig(GlobalConfig globalConfig){
EntityConfig entityConfig = globalConfig.getEntityConfig();
entityConfig.setClassSuffix("");
// 是否开启lombok注解
entityConfig.setOverwriteEnable(this.overwriteEnable());
entityConfig.setWithLombok(this.enableLombok());
entityConfig.setWithSwagger(this.enableSwagger());
entityConfig.setSuperClass(this.entitySupperClass());
}
/**
* 默认关闭Lombok注解
* @return
*/
protected boolean enableLombok(){
return false;
}
/**
* 默认关闭swagger注解
* @return
*/
protected boolean enableSwagger(){
return false;
}
/**
* 实体类父类的类全限定名
* @return
*/
protected Class entitySupperClass(){
return null;
}
/**
* 设置mapper配置
* @param globalConfig
*/
private void setMapperConfig(GlobalConfig globalConfig){
MapperConfig mapperConfig = globalConfig.getMapperConfig();
// 默认mapper文件永不覆盖
mapperConfig.setOverwriteEnable(false);
}
/**
* 设置service配置
* @param globalConfig
*/
private void setServiceConfig(GlobalConfig globalConfig){
ServiceConfig serviceConfig = globalConfig.getServiceConfig();
serviceConfig.setClassPrefix("I");
// 默认service文件永不覆盖
serviceConfig.setOverwriteEnable(false);
}
/**
* 设置serviceImpl配置
* @param globalConfig
*/
private void setServiceImplConfig(GlobalConfig globalConfig){
ServiceImplConfig serviceImplConfig = globalConfig.getServiceImplConfig();
// 默认mapper文件永不覆盖
serviceImplConfig.setOverwriteEnable(false);
}
/**
* controller配置
* @param globalConfig
*/
private void setControllerConfig(GlobalConfig globalConfig){
ControllerConfig controllerConfig = globalConfig.getControllerConfig();
// 默认mapper文件永不覆盖
controllerConfig.setOverwriteEnable(false);
controllerConfig.setSuperClass(this.restSupperClass());
controllerConfig.setRestStyle(this.enableRestStyle());
}
/**
* controller的父类
* @return
*/
protected Class restSupperClass(){
return null;
}
/**
* 是否生成restful风格的接口
* @return
*/
protected boolean enableRestStyle(){
return false;
}
/**
* TableDef配置
* @param globalConfig
*/
private void setTableDefConfig(GlobalConfig globalConfig){
TableDefConfig tableDefConfig = globalConfig.getTableDefConfig();
// 默认mapper文件永不覆盖
tableDefConfig.setOverwriteEnable(this.overwriteEnable());
}
/**
* MapperXmlConfig配置
* @param globalConfig
*/
private void setMapperXmlConfig(GlobalConfig globalConfig){
MapperXmlConfig mapperXmlConfig = globalConfig.getMapperXmlConfig();
// 默认mapper文件永不覆盖
mapperXmlConfig.setOverwriteEnable(false);
}
/**
* 设置全局列配置
* @param globalConfig
*/
protected void setGlobalColumnConfig(GlobalConfig globalConfig){
Map<String, ColumnConfig> columnConfigMap = new HashMap<>();
ColumnConfig columnConfig = new ColumnConfig();
columnConfig.setColumnName(this.globalPrimaryKeyName());
columnConfig.setPrimaryKey(true);
columnConfig.setKeyType(this.getKeyType());
columnConfigMap.put(this.globalPrimaryKeyName(), columnConfig);
globalConfig.getStrategyConfig().setColumnConfigMap(columnConfigMap);
}
/**
* 全局主键名称:默认ID
* @return
*/
private String globalPrimaryKeyName(){
return "id";
}
/**
* 主键生成策略默认:KeyType.Auto
* @return
*/
protected KeyType getKeyType(){
return KeyType.Auto;
}
/**
* 设置全局字段映射规则
*/
protected void jdbcTypeMapping(){
JdbcTypeMapping.registerMapping(LocalDateTime.class, Date.class);
}
/**
* 设置需要生成的文件模块:默认只生成entity,tableDef,mapper,mapperXml,service,serviceImpl
* @param globalConfig
*/
protected void setGlobalGenFile(GlobalConfig globalConfig){
globalConfig.enableEntity();
globalConfig.enableTableDef();
globalConfig.enableMapper();
globalConfig.enableMapperXml();
globalConfig.enableService();
globalConfig.enableServiceImpl();
if(!this.disableController()){
globalConfig.enableController();
}
if(!this.disablePackageInfo()){
globalConfig.enablePackageInfo();
}
}
/**
* 禁止生成controller:默认不生成
* @return
*/
protected boolean disableController(){
return true;
}
/**
* 默认不生成packageInfo
*
* @return
*/
protected boolean disablePackageInfo(){
return true;
}
/**
* 设置数据库连接地址
* @return
*/
public abstract String getUrl();
/**
* 数据库账号
* @return
*/
public abstract String getUsername();
/**
* 数据库密码
* @return
*/
public abstract String getPassword();
/**
* 设置包基础路径
* @return
*/
public abstract String basePackage();
/**
* 需要生成的数据库表名
*
* @return
*/
public abstract String[] tables();
/**
* 是否重新生成文件
* @return
*/
protected boolean overwriteEnable(){
return true;
}
}
使用
定义一个工具类,继承这个抽象类,并实现里面的抽象方法即可
package cn.com.wuhm.mybatis.flex.utils;
/**
* @Description
* @Author wuhuaming
* @Date 2023/8/30
*/
public class CodegenUtil extends AbstractFlexCodegen{
public static void main(String[] args) {
CodegenUtil codegenUtil = new CodegenUtil();
codegenUtil.codegen();
}
@Override
public String getUrl() {
return "jdbc:mysql://127.0.0.1:3306/flex_test?characterEncoding=utf-8";
}
@Override
public String getUsername() {
return "root";
}
@Override
public String getPassword() {
return "xxxxxx";
}
@Override
public String basePackage() {
return "cn.com.wuhm.mybatis.flex";
}
@Override
public String[] tables() {
return new String[]{"tb_account"};
}
@Override
protected String tablePrefix() {
return "tb_";
}
}