feat: 添加辅助类字段注释。

This commit is contained in:
Suomm 2023-07-14 10:15:59 +08:00
parent 814e3f292f
commit bef15d31dc
3 changed files with 67 additions and 18 deletions

View File

@ -23,6 +23,7 @@ import com.mybatisflex.processor.builder.ContentBuilder;
import com.mybatisflex.processor.config.ConfigurationKey; import com.mybatisflex.processor.config.ConfigurationKey;
import com.mybatisflex.processor.config.MybatisFlexConfig; import com.mybatisflex.processor.config.MybatisFlexConfig;
import com.mybatisflex.processor.entity.ColumnInfo; import com.mybatisflex.processor.entity.ColumnInfo;
import com.mybatisflex.processor.entity.TableInfo;
import com.mybatisflex.processor.util.FileUtil; import com.mybatisflex.processor.util.FileUtil;
import com.mybatisflex.processor.util.StrUtil; 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.DeclaredType;
import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror; import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types; import javax.lang.model.util.Types;
import javax.tools.JavaFileObject; import javax.tools.JavaFileObject;
import java.io.File; import java.io.File;
@ -77,12 +79,14 @@ public class MybatisFlexProcessor extends AbstractProcessor {
private Filer filer; private Filer filer;
private Types typeUtils; private Types typeUtils;
private Elements elementUtils;
private MybatisFlexConfig configuration; private MybatisFlexConfig configuration;
@Override @Override
public synchronized void init(ProcessingEnvironment processingEnvironment) { public synchronized void init(ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment); super.init(processingEnvironment);
this.filer = processingEnvironment.getFiler(); this.filer = processingEnvironment.getFiler();
this.elementUtils = processingEnvironment.getElementUtils();
this.typeUtils = processingEnvironment.getTypeUtils(); this.typeUtils = processingEnvironment.getTypeUtils();
this.configuration = new MybatisFlexConfig(filer); 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 文件 // 生成 TableDef 文件
String tableDefPackage = StrUtil.buildTableDefPackage(entityClass); String tableDefPackage = StrUtil.buildTableDefPackage(entityClass);
String tableDefClassName = entityClassName.concat(tableDefClassSuffix); 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); , tableDefPropertiesNameStyle, tableDefInstanceSuffix, columnInfos, defaultColumns);
processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent); processGenClass(genPath, tableDefPackage, tableDefClassName, tableDefContent);
@ -185,7 +196,7 @@ public class MybatisFlexProcessor extends AbstractProcessor {
// 标记 entity 如果没有配置 Tables 生成位置 entity 位置为准 // 标记 entity 如果没有配置 Tables 生成位置 entity 位置为准
entityClassReference = entityClass; entityClassReference = entityClass;
// 构建 Tables 常量属性及其导包 // 构建 Tables 常量属性及其导包
ContentBuilder.buildTablesField(importBuilder, fieldBuilder, table, entityClass, entityClassName, tableDefClassSuffix, tableDefPropertiesNameStyle, tableDefInstanceSuffix); ContentBuilder.buildTablesField(importBuilder, fieldBuilder, tableInfo, tableDefClassSuffix, tableDefPropertiesNameStyle, tableDefInstanceSuffix);
} }
// 是否生成 Mapper 文件 // 是否生成 Mapper 文件
@ -298,6 +309,7 @@ public class MybatisFlexProcessor extends AbstractProcessor {
columnInfo.setProperty(property); columnInfo.setProperty(property);
columnInfo.setColumn(columnName); columnInfo.setColumn(columnName);
columnInfo.setAlias(alias); columnInfo.setAlias(alias);
columnInfo.setComment(elementUtils.getDocComment(fieldElement));
columnInfos.add(columnInfo); columnInfos.add(columnInfo);

View File

@ -16,8 +16,8 @@
package com.mybatisflex.processor.builder; package com.mybatisflex.processor.builder;
import com.mybatisflex.annotation.Table;
import com.mybatisflex.processor.entity.ColumnInfo; import com.mybatisflex.processor.entity.ColumnInfo;
import com.mybatisflex.processor.entity.TableInfo;
import com.mybatisflex.processor.util.StrUtil; import com.mybatisflex.processor.util.StrUtil;
import java.util.Collection; import java.util.Collection;
@ -62,7 +62,7 @@ public class ContentBuilder {
/** /**
* 构建 TableDef 文件内容 * 构建 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 tableDefPackage, String tableDefClassName,
String tableDefPropertiesNameStyle, String tableDefInstanceSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix,
Collection<ColumnInfo> columnInfos, List<String> defaultColumns) { Collection<ColumnInfo> columnInfos, List<String> defaultColumns) {
@ -73,10 +73,22 @@ public class ContentBuilder {
content.append("// Auto generate by mybatis-flex, do not modify it.\n"); content.append("// Auto generate by mybatis-flex, do not modify it.\n");
content.append("public class ").append(tableDefClassName).append(" extends TableDef {\n\n"); content.append("public class ").append(tableDefClassName).append(" extends TableDef {\n\n");
if (!allInTablesEnable) { 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"); .append(" = new ").append(tableDefClassName).append("();\n\n");
} }
columnInfos.forEach((columnInfo) -> { 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 ") content.append(" public final QueryColumn ")
.append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)) .append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle))
.append(" = new QueryColumn(this, \"") .append(" = new QueryColumn(this, \"")
@ -84,22 +96,28 @@ public class ContentBuilder {
if (columnInfo.getAlias() != null && columnInfo.getAlias().length > 0) { if (columnInfo.getAlias() != null && columnInfo.getAlias().length > 0) {
content.append(", \"").append(columnInfo.getAlias()[0]).append("\""); 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(", "); StringJoiner defaultColumnJoiner = new StringJoiner(", ");
columnInfos.forEach((columnInfo) -> { columnInfos.forEach((columnInfo) -> {
if (defaultColumns.contains(columnInfo.getColumn())) { if (defaultColumns.contains(columnInfo.getColumn())) {
defaultColumnJoiner.add(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)); 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"); content.append(" public final QueryColumn[] ").append(StrUtil.buildFieldName("defaultColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn[]{").append(defaultColumnJoiner).append("};\n\n");
String schema = !StrUtil.isBlank(table.schema()) String schema = !StrUtil.isBlank(tableInfo.getSchema())
? table.schema() ? tableInfo.getSchema()
: ""; : "";
String tableName = !StrUtil.isBlank(table.value()) String tableName = !StrUtil.isBlank(tableInfo.getTableName())
? table.value() ? tableInfo.getTableName()
: StrUtil.firstCharToLowerCase(entityClassName); : StrUtil.firstCharToLowerCase(tableInfo.getEntitySimpleName());
content.append(" public ").append(tableDefClassName).append("() {\n") content.append(" public ").append(tableDefClassName).append("() {\n")
.append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n") .append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n")
.append(" }\n\n}\n"); .append(" }\n\n}\n");
@ -124,13 +142,19 @@ public class ContentBuilder {
/** /**
* 构建 Tables 文件常量属性 * 构建 Tables 文件常量属性
*/ */
public static void buildTablesField(StringBuilder importBuilder, StringBuilder fieldBuilder, Table table, public static void buildTablesField(StringBuilder importBuilder, StringBuilder fieldBuilder, TableInfo tableInfo,
String entityClass, String entityClassName, String tableDefClassSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix) { String tableDefClassSuffix, String tableDefPropertiesNameStyle, String tableDefInstanceSuffix) {
String tableDefPackage = StrUtil.buildTableDefPackage(entityClass); String tableDefPackage = StrUtil.buildTableDefPackage(tableInfo.getEntityName());
String tableDefClassName = entityClassName.concat(tableDefClassSuffix); String tableDefClassName = tableInfo.getEntitySimpleName().concat(tableDefClassSuffix);
importBuilder.append("import ").append(tableDefPackage).append('.').append(tableDefClassName).append(";\n"); 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(' ') 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"); .append(" = new ").append(tableDefClassName).append("();\n");
} }

View File

@ -31,6 +31,11 @@ public class ColumnInfo implements Comparable<ColumnInfo> {
*/ */
private String property; private String property;
/**
* 注释
*/
private String comment;
/** /**
* 列名 * 列名
*/ */
@ -49,6 +54,14 @@ public class ColumnInfo implements Comparable<ColumnInfo> {
this.property = property; this.property = property;
} }
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getColumn() { public String getColumn() {
return column; return column;
} }
@ -90,4 +103,4 @@ public class ColumnInfo implements Comparable<ColumnInfo> {
return compare == 0 ? property.compareTo(o.property) : compare; return compare == 0 ? property.compareTo(o.property) : compare;
} }
} }