mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
重构 apt 配置属性
processor.allInTables ---> processor.allInTables.enable processor.tablesPackage ---> processor.allInTables.package processor.tablesClassName ----> processor.allInTables.className processor.mappersGenerateEnable ----> processor.mapper.generateEnable processor.baseMapperClass ---> processor.mapper.baseClass processor.mappersPackage ---> processor.mapper.package processor.tablesNameStyle ---> processor.tableDef.propertiesNameStyle processor.tablesDefSuffix ---> processor.tableDef.instanceSuffix processor.entity.ignoreSuffixes ---> processor.tableDef.ignoreEntitySuffixes
This commit is contained in:
parent
5ea3b82aee
commit
462fa3b2bb
@ -17,17 +17,17 @@ MyBatis-Flex 使用了 APT(Annotation Processing Tool)技术,在项目编
|
||||
| ------------------------------- | ------------------------ | -------------------------------------------------------- | ------------------------------------ |
|
||||
| processor.enable | 全局启用apt开关 | true/false | true |
|
||||
| processor.stopBubbling | 是否停止向上级合并配 | true/false | false |
|
||||
| processor.mappersGenerateEnable | 开启 Mapper 自动生成 | true/false | false |
|
||||
| processor.genPath | APT 代码生成路径 | 合法的绝对或相对路径 | target/generated-sources/annotations |
|
||||
| processor.allInTables | 是否所有的类都生成在 Tables 类里 | true/false | false |
|
||||
| processor.tablesPackage | Tables 类名 | 合法的包名 | ${entityPackage}.table |
|
||||
| processor.tablesClassName | Tables 类名 | 合法的类名 | Tables |
|
||||
| processor.baseMapperClass | 自定义 Mapper 的父类 | 全路径类名 | com.mybatisflex.core.BaseMapper |
|
||||
| processor.mappersPackage | 自定义 Mapper 生成的包名 | 合法的包名 | ${entityPackage}.mapper |
|
||||
| processor.allInTables.enable | 是否所有的类都生成在 Tables 类里 | true/false | false |
|
||||
| processor.allInTables.tablesPackage | Tables 类名 | 合法的包名 | ${entityPackage}.table |
|
||||
| processor.allInTables.tablesClassName | Tables 类名 | 合法的类名 | Tables |
|
||||
| processor.mapper.generateEnable | 开启 Mapper 自动生成 | true/false | false |
|
||||
| processor.mapper.baseClass | 自定义 Mapper 的父类 | 全路径类名 | com.mybatisflex.core.BaseMapper |
|
||||
| processor.mapper.package | 自定义 Mapper 生成的包名 | 合法的包名 | ${entityPackage}.mapper |
|
||||
| processor.tableDef.propertiesNameStyle | 生成辅助类的字段风格 | upperCase, lowerCase<br />upperCamelCase, lowerCamelCase | upperCase |
|
||||
| processor.tableDef.instanceSuffix | 生成的表对应的变量后缀 | string | 空字符串 |
|
||||
| processor.tableDef.classSuffix | 生成的表对应的变量后缀 | string | 空字符串 |
|
||||
| processor.entity.ignoreSuffixes | 过滤 Entity 后缀 | string | - |
|
||||
| processor.tableDef.classSuffix | 生成的 TableDef 类的后缀 | string | TableDef |
|
||||
| processor.tableDef.ignoreEntitySuffixes | 过滤 Entity 后缀 | string | - |
|
||||
|
||||
|
||||
|
||||
|
||||
@ -90,20 +90,21 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
|
||||
if (!roundEnv.processingOver()) {
|
||||
System.out.println("mybatis flex processor run start...");
|
||||
|
||||
// 不启用 APT 功能
|
||||
if ("false".equalsIgnoreCase(configuration.get(ConfigurationKey.ENABLE))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
System.out.println("mybatis flex processor run start...");
|
||||
|
||||
// 是否所有的类常量都生成在 Tables 类里
|
||||
boolean allInTables = "true".equalsIgnoreCase(configuration.get(ConfigurationKey.ALL_IN_TABLES));
|
||||
boolean allInTablesEnable = "true".equalsIgnoreCase(configuration.get(ConfigurationKey.ALL_IN_TABLES_ENABLE));
|
||||
|
||||
StringBuilder importBuilder;
|
||||
StringBuilder fieldBuilder;
|
||||
|
||||
if (allInTables) {
|
||||
if (allInTablesEnable) {
|
||||
importBuilder = new StringBuilder();
|
||||
fieldBuilder = new StringBuilder();
|
||||
} else {
|
||||
@ -113,15 +114,21 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
|
||||
// 其他配置选项
|
||||
String genPath = configuration.get(ConfigurationKey.GEN_PATH);
|
||||
String tablesPackage = configuration.get(ConfigurationKey.TABLES_PACKAGE);
|
||||
String mappersPackage = configuration.get(ConfigurationKey.MAPPERS_PACKAGE);
|
||||
String baseMapperClass = configuration.get(ConfigurationKey.BASE_MAPPER_CLASS);
|
||||
String tablesDefSuffix = configuration.get(ConfigurationKey.TABLES_DEF_SUFFIX);
|
||||
String tablesNameStyle = configuration.get(ConfigurationKey.TABLE_NAME_STYLE);
|
||||
String tablesClassName = configuration.get(ConfigurationKey.TABLES_CLASS_NAME);
|
||||
String mappersGenerateEnable = configuration.get(ConfigurationKey.MAPPERS_GENERATE_ENABLE);
|
||||
|
||||
String[] entityIgnoreSuffixes = configuration.get(ConfigurationKey.IGNORE_SUFFIXES).split(",");
|
||||
// all in Tables 配置
|
||||
String allInTablesPackage = configuration.get(ConfigurationKey.ALL_IN_TABLES_PACKAGE);
|
||||
String allInTablesClassName = configuration.get(ConfigurationKey.ALL_IN_TABLES_CLASS_NAME);
|
||||
|
||||
// mapper 配置
|
||||
String mapperGenerateEnable = configuration.get(ConfigurationKey.MAPPER_GENERATE_ENABLE);
|
||||
String mapperPackage = configuration.get(ConfigurationKey.MAPPER_PACKAGE);
|
||||
String mapperBaseClass = configuration.get(ConfigurationKey.MAPPER_BASE_CLASS);
|
||||
|
||||
// tableDef 配置
|
||||
String tableDefClassSuffix = configuration.get(ConfigurationKey.TABLE_DEF_CLASS_SUFFIX);
|
||||
String tableDefInstanceSuffix = configuration.get(ConfigurationKey.TABLE_DEF_INSTANCE_SUFFIX);
|
||||
String tableDefPropertiesNameStyle = configuration.get(ConfigurationKey.TABLE_DEF_PROPERTIES_NAME_STYLE);
|
||||
String[] tableDefIgnoreEntitySuffixes = configuration.get(ConfigurationKey.TABLE_DEF_IGNORE_ENTITY_SUFFIXES).split(",");
|
||||
|
||||
// 如果不指定 Tables 生成包,那么 Tables 文件就会和最后一个 entity 文件在同一个包
|
||||
String entityClassReference = null;
|
||||
@ -162,7 +169,7 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
String entityClassName = StrUtil.getClassName(entityClass);
|
||||
|
||||
// 处理 entity 后缀
|
||||
for (String entityIgnoreSuffix : entityIgnoreSuffixes) {
|
||||
for (String entityIgnoreSuffix : tableDefIgnoreEntitySuffixes) {
|
||||
if (entityClassName.endsWith(entityIgnoreSuffix.trim())) {
|
||||
entityClassName = entityClassName.substring(0, entityClassName.length() - entityIgnoreSuffix.length());
|
||||
break;
|
||||
@ -171,31 +178,32 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
|
||||
// 生成 TableDef 文件
|
||||
String tableDefPackage = StrUtil.buildTableDefPackage(entityClass);
|
||||
String tableDefClassName = entityClassName.concat("TableDef");
|
||||
String tableDefContent = ContentBuilder.buildTableDef(table, entityClass, entityClassName, allInTables, tableDefPackage, tableDefClassName, tablesNameStyle, tablesDefSuffix, columnInfoList, defaultColumns);
|
||||
String tableDefClassName = entityClassName.concat(tableDefClassSuffix);
|
||||
String tableDefContent = ContentBuilder.buildTableDef(table, entityClass, entityClassName, allInTablesEnable, tableDefPackage, tableDefClassName
|
||||
, tableDefPropertiesNameStyle, tableDefInstanceSuffix, columnInfoList, defaultColumns);
|
||||
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent);
|
||||
|
||||
if (allInTables) {
|
||||
if (allInTablesEnable) {
|
||||
// 标记 entity 类,如果没有配置 Tables 生成位置,以 entity 位置为准
|
||||
entityClassReference = entityClass;
|
||||
// 构建 Tables 常量属性及其导包
|
||||
ContentBuilder.buildTablesField(importBuilder, fieldBuilder, table, entityClass, entityClassName, tablesNameStyle, tablesDefSuffix);
|
||||
ContentBuilder.buildTablesField(importBuilder, fieldBuilder, table, entityClass, entityClassName, tableDefClassSuffix, tableDefPropertiesNameStyle, tableDefInstanceSuffix);
|
||||
}
|
||||
|
||||
// 是否生成 Mapper 文件
|
||||
if ("true".equalsIgnoreCase(mappersGenerateEnable) && table.mapperGenerateEnable()) {
|
||||
String realMapperPackage = StrUtil.isBlank(mappersPackage) ? StrUtil.buildMapperPackage(entityClass) : mappersPackage;
|
||||
if ("true".equalsIgnoreCase(mapperGenerateEnable) && table.mapperGenerateEnable()) {
|
||||
String realMapperPackage = StrUtil.isBlank(mapperPackage) ? StrUtil.buildMapperPackage(entityClass) : mapperPackage;
|
||||
String mapperClassName = entityClassName.concat("Mapper");
|
||||
String mapperClassContent = ContentBuilder.buildMapper(entityClass, entityClassName, realMapperPackage, mapperClassName, baseMapperClass);
|
||||
String mapperClassContent = ContentBuilder.buildMapper(entityClass, entityClassName, realMapperPackage, mapperClassName, mapperBaseClass);
|
||||
processGenClass(genPath, realMapperPackage, mapperClassName, mapperClassContent);
|
||||
}
|
||||
|
||||
// handle NPE, ensure TableDef already generate.
|
||||
if (index == size && allInTables) {
|
||||
if (index == size && allInTablesEnable) {
|
||||
// 生成 Tables 文件
|
||||
String realTablesPackage = StrUtil.isBlank(tablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : tablesPackage;
|
||||
String realTablesClassName = StrUtil.isBlank(tablesClassName) ? "Tables" : tablesClassName;
|
||||
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, tablesClassName);
|
||||
String realTablesPackage = StrUtil.isBlank(allInTablesPackage) ? StrUtil.buildTableDefPackage(entityClassReference) : allInTablesPackage;
|
||||
String realTablesClassName = StrUtil.isBlank(allInTablesClassName) ? "Tables" : allInTablesClassName;
|
||||
String tablesContent = ContentBuilder.buildTables(importBuilder, fieldBuilder, realTablesPackage, allInTablesClassName);
|
||||
processGenClass(genPath, realTablesPackage, realTablesClassName, tablesContent);
|
||||
}
|
||||
}
|
||||
@ -323,7 +331,6 @@ public class MybatisFlexProcessor extends AbstractProcessor {
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void processGenClass(String genBasePath, String genPackageName, String className, String genContent) {
|
||||
Writer writer = null;
|
||||
try {
|
||||
|
||||
@ -53,9 +53,9 @@ public class ContentBuilder {
|
||||
/**
|
||||
* 构建 TableDef 文件内容。
|
||||
*/
|
||||
public static String buildTableDef(Table table, String entityClass, String entityClassName, boolean allInTables,
|
||||
public static String buildTableDef(Table table, String entityClass, String entityClassName, boolean allInTablesEnable,
|
||||
String tableDefPackage, String tableDefClassName,
|
||||
String tablesNameStyle, String tablesDefSuffix,
|
||||
String tableDefPropertiesNameStyle, String tableDefInstanceSuffix,
|
||||
List<ColumnInfo> columnInfoList, List<String> defaultColumns) {
|
||||
StringBuilder content = new StringBuilder("package ");
|
||||
content.append(tableDefPackage).append(";\n\n");
|
||||
@ -63,19 +63,19 @@ public class ContentBuilder {
|
||||
content.append("import com.mybatisflex.core.table.TableDef;\n\n");
|
||||
content.append("// Auto generate by mybatis-flex, do not modify it.\n");
|
||||
content.append("public class ").append(tableDefClassName).append(" extends TableDef {\n\n");
|
||||
if (!allInTables) {
|
||||
if (!allInTablesEnable) {
|
||||
String schema = !StrUtil.isBlank(table.schema())
|
||||
? table.schema()
|
||||
: "";
|
||||
String tableName = !StrUtil.isBlank(table.value())
|
||||
? table.value()
|
||||
: StrUtil.firstCharToLowerCase(entityClassName);
|
||||
content.append(" public static final ").append(tableDefClassName).append(' ').append(StrUtil.buildFieldName(entityClassName.concat(tablesDefSuffix != null ? tablesDefSuffix.trim() : ""), tablesNameStyle))
|
||||
content.append(" public static final ").append(tableDefClassName).append(' ').append(StrUtil.buildFieldName(entityClassName.concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle))
|
||||
.append(" = new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n\n");
|
||||
}
|
||||
columnInfoList.forEach((columnInfo) -> {
|
||||
content.append(" public QueryColumn ")
|
||||
.append(StrUtil.buildFieldName(columnInfo.getProperty(), tablesNameStyle))
|
||||
.append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle))
|
||||
.append(" = new QueryColumn(this, \"")
|
||||
.append(columnInfo.getColumn()).append("\"");
|
||||
if (columnInfo.getAlias() != null && columnInfo.getAlias().length > 0) {
|
||||
@ -83,14 +83,14 @@ public class ContentBuilder {
|
||||
}
|
||||
content.append(");\n");
|
||||
});
|
||||
content.append(" public QueryColumn ").append(StrUtil.buildFieldName("allColumns", tablesNameStyle)).append(" = new QueryColumn(this, \"*\");\n");
|
||||
content.append(" public QueryColumn ").append(StrUtil.buildFieldName("allColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn(this, \"*\");\n");
|
||||
StringJoiner defaultColumnJoiner = new StringJoiner(", ");
|
||||
columnInfoList.forEach((columnInfo) -> {
|
||||
if (defaultColumns.contains(columnInfo.getColumn())) {
|
||||
defaultColumnJoiner.add(StrUtil.buildFieldName(columnInfo.getProperty(), tablesNameStyle));
|
||||
defaultColumnJoiner.add(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle));
|
||||
}
|
||||
});
|
||||
content.append(" public QueryColumn[] ").append(StrUtil.buildFieldName("defaultColumns", tablesNameStyle)).append(" = new QueryColumn[]{").append(defaultColumnJoiner).append("};\n\n");
|
||||
content.append(" public QueryColumn[] ").append(StrUtil.buildFieldName("defaultColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn[]{").append(defaultColumnJoiner).append("};\n\n");
|
||||
content.append(" public ").append(tableDefClassName).append("(String schema, String tableName) {\n")
|
||||
.append(" super(schema, tableName);\n")
|
||||
.append(" }\n\n}\n");
|
||||
@ -116,9 +116,9 @@ public class ContentBuilder {
|
||||
* 构建 Tables 文件常量属性。
|
||||
*/
|
||||
public static void buildTablesField(StringBuilder importBuilder, StringBuilder fieldBuilder, Table table,
|
||||
String entityClass, String entityClassName, String tablesNameStyle, String tablesDefSuffix) {
|
||||
String entityClass, String entityClassName, String tableDefClassSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix) {
|
||||
String tableDefPackage = StrUtil.buildTableDefPackage(entityClass);
|
||||
String tableDefClassName = entityClassName.concat("TableDef");
|
||||
String tableDefClassName = entityClassName.concat(tableDefClassSuffix);
|
||||
importBuilder.append("import ").append(tableDefPackage).append('.').append(tableDefClassName).append(";\n");
|
||||
String schema = !StrUtil.isBlank(table.schema())
|
||||
? table.schema()
|
||||
@ -127,7 +127,7 @@ public class ContentBuilder {
|
||||
? table.value()
|
||||
: StrUtil.firstCharToLowerCase(entityClassName);
|
||||
fieldBuilder.append(" public static final ").append(tableDefClassName).append(' ')
|
||||
.append(StrUtil.buildFieldName(entityClassName.concat(tablesDefSuffix != null ? tablesDefSuffix.trim() : ""), tablesNameStyle))
|
||||
.append(StrUtil.buildFieldName(entityClassName.concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle))
|
||||
.append(" = new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n");
|
||||
}
|
||||
|
||||
|
||||
@ -34,50 +34,59 @@ public enum ConfigurationKey {
|
||||
*/
|
||||
GEN_PATH("processor.genPath", ""),
|
||||
|
||||
/**
|
||||
* 自定义 Tables 生成的包名。
|
||||
*/
|
||||
TABLES_PACKAGE("processor.tablesPackage", null),
|
||||
|
||||
/**
|
||||
* 自定义 Mapper 的父类。
|
||||
*/
|
||||
BASE_MAPPER_CLASS("processor.baseMapperClass", "com.mybatisflex.core.BaseMapper"),
|
||||
|
||||
/**
|
||||
* 开启 Mapper 自动生成。
|
||||
*/
|
||||
MAPPERS_GENERATE_ENABLE("processor.mappersGenerateEnable", "false"),
|
||||
|
||||
/**
|
||||
* 自定义 Mapper 生成的包名。
|
||||
*/
|
||||
MAPPERS_PACKAGE("processor.mappersPackage", null),
|
||||
|
||||
/**
|
||||
* 是否所有的类都生成在 Tables 类里。
|
||||
*/
|
||||
ALL_IN_TABLES("processor.allInTables", "false"),
|
||||
ALL_IN_TABLES_ENABLE("processor.allInTables.enable", "false"),
|
||||
|
||||
/**
|
||||
* Tables 类名。
|
||||
*/
|
||||
TABLES_CLASS_NAME("processor.tablesClassName", "Tables"),
|
||||
ALL_IN_TABLES_CLASS_NAME("processor.allInTables.className", "Tables"),
|
||||
|
||||
/**
|
||||
* 生成辅助类的字段风格。
|
||||
* 自定义 Tables 生成的包名。
|
||||
*/
|
||||
TABLE_NAME_STYLE("processor.tablesNameStyle", "upperCase"),
|
||||
ALL_IN_TABLES_PACKAGE("processor.allInTables.package", null),
|
||||
|
||||
|
||||
/**
|
||||
* 开启 Mapper 自动生成。
|
||||
*/
|
||||
MAPPER_GENERATE_ENABLE("processor.mapper.generateEnable", "false"),
|
||||
|
||||
/**
|
||||
* 自定义 Mapper 的父类。
|
||||
*/
|
||||
MAPPER_BASE_CLASS("processor.mapper.baseClass", "com.mybatisflex.core.BaseMapper"),
|
||||
|
||||
/**
|
||||
* 自定义 Mapper 生成的包名。
|
||||
*/
|
||||
MAPPER_PACKAGE("processor.mapper.package", null),
|
||||
|
||||
|
||||
/**
|
||||
* 生成的 Class 的后缀。
|
||||
*/
|
||||
TABLE_DEF_CLASS_SUFFIX("processor.tableDef.classSuffix", "TableDef"),
|
||||
|
||||
/**
|
||||
* 生成的表对应的变量后缀。
|
||||
*/
|
||||
TABLES_DEF_SUFFIX("processor.tablesDefSuffix", ""),
|
||||
TABLE_DEF_INSTANCE_SUFFIX("processor.tableDef.instanceSuffix", ""),
|
||||
|
||||
/**
|
||||
* 生成辅助类的字段风格。
|
||||
*/
|
||||
TABLE_DEF_PROPERTIES_NAME_STYLE("processor.tableDef.propertiesNameStyle", "upperCase"),
|
||||
|
||||
/**
|
||||
* 过滤 Entity 后缀。
|
||||
*/
|
||||
IGNORE_SUFFIXES("processor.entity.ignoreSuffixes", "");
|
||||
TABLE_DEF_IGNORE_ENTITY_SUFFIXES("processor.tableDef.ignoreEntitySuffixes", "");
|
||||
|
||||
|
||||
private final String configKey;
|
||||
private final String defaultValue;
|
||||
|
||||
@ -75,12 +75,12 @@ public class StrUtil {
|
||||
return str;
|
||||
}
|
||||
|
||||
public static String buildFieldName(String name, String style) {
|
||||
if ("upperCase".equalsIgnoreCase(style)) {
|
||||
public static String buildFieldName(String name, String tableDefPropertiesNameStyle) {
|
||||
if ("upperCase".equalsIgnoreCase(tableDefPropertiesNameStyle)) {
|
||||
return camelToUnderline(name).toUpperCase();
|
||||
} else if ("lowerCase".equalsIgnoreCase(style)) {
|
||||
} else if ("lowerCase".equalsIgnoreCase(tableDefPropertiesNameStyle)) {
|
||||
return camelToUnderline(name).toLowerCase();
|
||||
} else if ("upperCamelCase".equalsIgnoreCase(style)) {
|
||||
} else if ("upperCamelCase".equalsIgnoreCase(tableDefPropertiesNameStyle)) {
|
||||
return firstCharToUpperCase(name);
|
||||
} else {
|
||||
//lowerCamelCase
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
processor.mappersGenerateEnable=true
|
||||
processor.entity.ignoreSuffixes=Entity
|
||||
#processor.allInTables=true
|
||||
processor.baseMapperClass=com.mybatisflex.test.mapper.MyBaseMapper
|
||||
processor.mapper.generateEnable=true
|
||||
processor.tableDef.ignoreEntitySuffixes=Entity
|
||||
#processor.allInTables.enable=true
|
||||
processor.mapper.baseClass=com.mybatisflex.test.mapper.MyBaseMapper
|
||||
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
processor.mappersGenerateEnable=true
|
||||
processor.mapper.generateEnable=true
|
||||
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
processor.mappersGenerateEnable = false
|
||||
processor.allInTables = true
|
||||
processor.mapper.generateEnable = false
|
||||
processor.allInTables.enable = true
|
||||
Loading…
x
Reference in New Issue
Block a user