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 f98ee1f7..187ea028 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 @@ -23,6 +23,7 @@ import com.mybatisflex.processor.builder.ContentBuilder; import com.mybatisflex.processor.config.ConfigurationKey; import com.mybatisflex.processor.config.MybatisFlexConfig; import com.mybatisflex.processor.entity.ColumnInfo; +import com.mybatisflex.processor.entity.TableInfo; import com.mybatisflex.processor.util.FileUtil; import com.mybatisflex.processor.util.StrUtil; @@ -35,6 +36,7 @@ import javax.lang.model.element.*; import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; import javax.lang.model.util.Types; import javax.tools.JavaFileObject; import java.io.File; @@ -77,12 +79,14 @@ public class MybatisFlexProcessor extends AbstractProcessor { private Filer filer; private Types typeUtils; + private Elements elementUtils; private MybatisFlexConfig configuration; @Override public synchronized void init(ProcessingEnvironment processingEnvironment) { super.init(processingEnvironment); this.filer = processingEnvironment.getFiler(); + this.elementUtils = processingEnvironment.getElementUtils(); this.typeUtils = processingEnvironment.getTypeUtils(); this.configuration = new MybatisFlexConfig(filer); } @@ -174,10 +178,17 @@ public class MybatisFlexProcessor extends AbstractProcessor { } } + TableInfo tableInfo = new TableInfo(); + tableInfo.setEntityName(entityClass); + tableInfo.setEntitySimpleName(entityClassName); + tableInfo.setTableName(table.value()); + tableInfo.setSchema(table.schema()); + tableInfo.setEntityComment(elementUtils.getDocComment(entityClassElement)); + // 生成 TableDef 文件 String tableDefPackage = StrUtil.buildTableDefPackage(entityClass); String tableDefClassName = entityClassName.concat(tableDefClassSuffix); - String tableDefContent = ContentBuilder.buildTableDef(table, entityClass, entityClassName, allInTablesEnable, tableDefPackage, tableDefClassName + String tableDefContent = ContentBuilder.buildTableDef(tableInfo, allInTablesEnable, tableDefPackage, tableDefClassName , tableDefPropertiesNameStyle, tableDefInstanceSuffix, columnInfos, defaultColumns); processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent); @@ -185,7 +196,7 @@ public class MybatisFlexProcessor extends AbstractProcessor { // 标记 entity 类,如果没有配置 Tables 生成位置,以 entity 位置为准 entityClassReference = entityClass; // 构建 Tables 常量属性及其导包 - ContentBuilder.buildTablesField(importBuilder, fieldBuilder, table, entityClass, entityClassName, tableDefClassSuffix, tableDefPropertiesNameStyle, tableDefInstanceSuffix); + ContentBuilder.buildTablesField(importBuilder, fieldBuilder, tableInfo, tableDefClassSuffix, tableDefPropertiesNameStyle, tableDefInstanceSuffix); } // 是否生成 Mapper 文件 @@ -298,6 +309,7 @@ public class MybatisFlexProcessor extends AbstractProcessor { columnInfo.setProperty(property); columnInfo.setColumn(columnName); columnInfo.setAlias(alias); + columnInfo.setComment(elementUtils.getDocComment(fieldElement)); columnInfos.add(columnInfo); 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 609fbfb1..142c9908 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 @@ -16,8 +16,8 @@ package com.mybatisflex.processor.builder; -import com.mybatisflex.annotation.Table; import com.mybatisflex.processor.entity.ColumnInfo; +import com.mybatisflex.processor.entity.TableInfo; import com.mybatisflex.processor.util.StrUtil; import java.util.Collection; @@ -62,7 +62,7 @@ public class ContentBuilder { /** * 构建 TableDef 文件内容。 */ - public static String buildTableDef(Table table, String entityClass, String entityClassName, boolean allInTablesEnable, + public static String buildTableDef(TableInfo tableInfo, boolean allInTablesEnable, String tableDefPackage, String tableDefClassName, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix, Collection columnInfos, List defaultColumns) { @@ -73,10 +73,22 @@ public class ContentBuilder { content.append("// Auto generate by mybatis-flex, do not modify it.\n"); content.append("public class ").append(tableDefClassName).append(" extends TableDef {\n\n"); if (!allInTablesEnable) { - content.append(" public static final ").append(tableDefClassName).append(' ').append(StrUtil.buildFieldName(entityClassName.concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle)) + String entityComment = tableInfo.getEntityComment(); + if (!StrUtil.isBlank(entityComment)) { + content.append(" /**\n") + .append(" * ").append(entityComment.trim()).append("\n") + .append(" */\n"); + } + content.append(" public static final ").append(tableDefClassName).append(' ').append(StrUtil.buildFieldName(tableInfo.getEntitySimpleName().concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle)) .append(" = new ").append(tableDefClassName).append("();\n\n"); } columnInfos.forEach((columnInfo) -> { + String comment = columnInfo.getComment(); + if (!StrUtil.isBlank(comment)) { + content.append(" /**\n") + .append(" * ").append(comment.trim()).append("\n") + .append(" */\n"); + } content.append(" public final QueryColumn ") .append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)) .append(" = new QueryColumn(this, \"") @@ -84,22 +96,28 @@ public class ContentBuilder { if (columnInfo.getAlias() != null && columnInfo.getAlias().length > 0) { content.append(", \"").append(columnInfo.getAlias()[0]).append("\""); } - content.append(");\n"); + content.append(");\n\n"); }); - content.append("\n public final QueryColumn ").append(StrUtil.buildFieldName("allColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn(this, \"*\");\n"); + content.append(" /**\n") + .append(" * 所有字段。\n") + .append(" */\n"); + content.append(" public final QueryColumn ").append(StrUtil.buildFieldName("allColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn(this, \"*\");\n"); StringJoiner defaultColumnJoiner = new StringJoiner(", "); columnInfos.forEach((columnInfo) -> { if (defaultColumns.contains(columnInfo.getColumn())) { defaultColumnJoiner.add(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)); } }); + content.append("\n /**\n") + .append(" * 默认字段,不包含逻辑删除或者 large 等字段。\n") + .append(" */\n"); content.append(" public final QueryColumn[] ").append(StrUtil.buildFieldName("defaultColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn[]{").append(defaultColumnJoiner).append("};\n\n"); - String schema = !StrUtil.isBlank(table.schema()) - ? table.schema() + String schema = !StrUtil.isBlank(tableInfo.getSchema()) + ? tableInfo.getSchema() : ""; - String tableName = !StrUtil.isBlank(table.value()) - ? table.value() - : StrUtil.firstCharToLowerCase(entityClassName); + String tableName = !StrUtil.isBlank(tableInfo.getTableName()) + ? tableInfo.getTableName() + : StrUtil.firstCharToLowerCase(tableInfo.getEntitySimpleName()); content.append(" public ").append(tableDefClassName).append("() {\n") .append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n") .append(" }\n\n}\n"); @@ -124,13 +142,19 @@ public class ContentBuilder { /** * 构建 Tables 文件常量属性。 */ - public static void buildTablesField(StringBuilder importBuilder, StringBuilder fieldBuilder, Table table, - String entityClass, String entityClassName, String tableDefClassSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix) { - String tableDefPackage = StrUtil.buildTableDefPackage(entityClass); - String tableDefClassName = entityClassName.concat(tableDefClassSuffix); + public static void buildTablesField(StringBuilder importBuilder, StringBuilder fieldBuilder, TableInfo tableInfo, + String tableDefClassSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix) { + String tableDefPackage = StrUtil.buildTableDefPackage(tableInfo.getEntityName()); + String tableDefClassName = tableInfo.getEntitySimpleName().concat(tableDefClassSuffix); importBuilder.append("import ").append(tableDefPackage).append('.').append(tableDefClassName).append(";\n"); + String entityComment = tableInfo.getEntityComment(); + if (!StrUtil.isBlank(entityComment)) { + fieldBuilder.append(" /**\n") + .append(" * ").append(entityComment).append("\n") + .append(" */\n"); + } fieldBuilder.append(" public static final ").append(tableDefClassName).append(' ') - .append(StrUtil.buildFieldName(entityClassName.concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle)) + .append(StrUtil.buildFieldName(tableInfo.getEntitySimpleName().concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle)) .append(" = new ").append(tableDefClassName).append("();\n"); } diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/entity/ColumnInfo.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/entity/ColumnInfo.java index 93649a3c..8bb32d52 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/entity/ColumnInfo.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/entity/ColumnInfo.java @@ -31,6 +31,11 @@ public class ColumnInfo implements Comparable { */ private String property; + /** + * 注释。 + */ + private String comment; + /** * 列名。 */ @@ -49,6 +54,14 @@ public class ColumnInfo implements Comparable { this.property = property; } + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + public String getColumn() { return column; } @@ -90,4 +103,4 @@ public class ColumnInfo implements Comparable { return compare == 0 ? property.compareTo(o.property) : compare; } -} \ No newline at end of file +}