diff --git a/docs/zh/others/apt.md b/docs/zh/others/apt.md index 2e5d9852..32f7a26d 100644 --- a/docs/zh/others/apt.md +++ b/docs/zh/others/apt.md @@ -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
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 | - | diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/MybatisFlexProcessor.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/MybatisFlexProcessor.java index 7c081108..3d4f8b0e 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/MybatisFlexProcessor.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/MybatisFlexProcessor.java @@ -90,20 +90,21 @@ public class MybatisFlexProcessor extends AbstractProcessor { @Override public boolean process(Set 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 { diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/builder/ContentBuilder.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/builder/ContentBuilder.java index 264c6973..a42651e9 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/builder/ContentBuilder.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/builder/ContentBuilder.java @@ -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 columnInfoList, List 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"); } diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/config/ConfigurationKey.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/config/ConfigurationKey.java index 2320a80e..a43cb96c 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/config/ConfigurationKey.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/config/ConfigurationKey.java @@ -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; diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/util/StrUtil.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/util/StrUtil.java index 7447ecea..e314eba9 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/util/StrUtil.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/util/StrUtil.java @@ -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 diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/mybatis-flex.config b/mybatis-flex-test/mybatis-flex-spring-boot-test/mybatis-flex.config index 7caf83f7..e279d35b 100644 --- a/mybatis-flex-test/mybatis-flex-spring-boot-test/mybatis-flex.config +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/mybatis-flex.config @@ -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 diff --git a/mybatis-flex-test/mybatis-flex-spring-cloud-test/mybatis-flex.config b/mybatis-flex-test/mybatis-flex-spring-cloud-test/mybatis-flex.config index 812235c5..8696cac6 100644 --- a/mybatis-flex-test/mybatis-flex-spring-cloud-test/mybatis-flex.config +++ b/mybatis-flex-test/mybatis-flex-spring-cloud-test/mybatis-flex.config @@ -1,2 +1,2 @@ -processor.mappersGenerateEnable=true +processor.mapper.generateEnable=true diff --git a/mybatis-flex-test/mybatis-flex-spring-test/mybatis-flex.config b/mybatis-flex-test/mybatis-flex-spring-test/mybatis-flex.config index f84786d9..8c885482 100644 --- a/mybatis-flex-test/mybatis-flex-spring-test/mybatis-flex.config +++ b/mybatis-flex-test/mybatis-flex-spring-test/mybatis-flex.config @@ -1,2 +1,2 @@ -processor.mappersGenerateEnable = false -processor.allInTables = true \ No newline at end of file +processor.mapper.generateEnable = false +processor.allInTables.enable = true \ No newline at end of file