diff --git a/mybatis-flex-codegen/src/main/resources/templates/enjoy/tableDef.tpl b/mybatis-flex-codegen/src/main/resources/templates/enjoy/tableDef.tpl index dd96b787..c2089fa7 100644 --- a/mybatis-flex-codegen/src/main/resources/templates/enjoy/tableDef.tpl +++ b/mybatis-flex-codegen/src/main/resources/templates/enjoy/tableDef.tpl @@ -1,4 +1,5 @@ #set(tableDefClassName = table.buildTableDefClassName()) +#set(schema = table.schema == null ? "" : table.schema) package #(packageConfig.tableDefPackage); import com.mybatisflex.core.query.QueryColumn; @@ -12,17 +13,17 @@ import com.mybatisflex.core.table.TableDef; */ public class #(tableDefClassName) extends TableDef { - public static final #(tableDefClassName) #(tableDefConfig.buildFieldName(table.buildEntityClassName() + tableDefConfig.instanceSuffix)) = new #(tableDefClassName)("#(table.name)"); + public static final #(tableDefClassName) #(tableDefConfig.buildFieldName(table.buildEntityClassName() + tableDefConfig.instanceSuffix)) = new #(tableDefClassName)(); #for(column: table.columns) - public QueryColumn #(tableDefConfig.buildFieldName(column.property)) = new QueryColumn(this, "#(column.name)"); + public final QueryColumn #(tableDefConfig.buildFieldName(column.property)) = new QueryColumn(this, "#(column.name)"); #end - public QueryColumn #(tableDefConfig.buildFieldName("allColumns")) = new QueryColumn(this, "*"); - public QueryColumn[] #(tableDefConfig.buildFieldName("defaultColumns")) = new QueryColumn[]{#for(column: table.columns) #if(!column.isLarge())#(tableDefConfig.buildFieldName(column.property))#if(for.index + 1 != for.size),#end#end#end}; + public final QueryColumn #(tableDefConfig.buildFieldName("allColumns")) = new QueryColumn(this, "*"); + public final QueryColumn[] #(tableDefConfig.buildFieldName("defaultColumns")) = new QueryColumn[]{#for(column: table.columns)#if(!column.isLarge())#(tableDefConfig.buildFieldName(column.property))#if(for.index + 1 != for.size), #end#end#end}; - public #(tableDefClassName)(String tableName) { - super(tableName); + public #(tableDefClassName)() { + super("#(schema)", "#(table.name)"); } } 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 0d1dcf22..4a8c3dd7 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 @@ -149,7 +149,7 @@ public class MybatisFlexProcessor extends AbstractProcessor { assert table != null; // 类属性 fix: https://gitee.com/mybatis-flex/mybatis-flex/issues/I7I08X - Set columnInfos = new HashSet<>(); + Set columnInfos = new TreeSet<>(); // 默认查询的属性,非 isLarge 字段 List defaultColumns = new ArrayList<>(); 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 069388d0..a0935216 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 @@ -65,17 +65,11 @@ 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) { - 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(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle)) - .append(" = new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n\n"); + .append(" = new ").append(tableDefClassName).append("();\n\n"); } columnInfos.forEach((columnInfo) -> { - content.append(" public QueryColumn ") + content.append(" public final QueryColumn ") .append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)) .append(" = new QueryColumn(this, \"") .append(columnInfo.getColumn()).append("\""); @@ -84,16 +78,22 @@ public class ContentBuilder { } content.append(");\n"); }); - content.append(" public QueryColumn ").append(StrUtil.buildFieldName("allColumns", tableDefPropertiesNameStyle)).append(" = new QueryColumn(this, \"*\");\n"); + content.append("\n 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(" 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") + 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 tableName = !StrUtil.isBlank(table.value()) + ? table.value() + : StrUtil.firstCharToLowerCase(entityClassName); + content.append(" public ").append(tableDefClassName).append("() {\n") + .append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n") .append(" }\n\n}\n"); return content.toString(); } @@ -107,8 +107,8 @@ public class ContentBuilder { importBuilder.toString() + "\n// Auto generate by mybatis-flex, do not modify it.\n" + "public class " + tablesClassName + " {\n\n" + - " private " + tablesClassName + "() {\n" + - " }\n\n" + + " private " + tablesClassName + "() {\n" + + " }\n\n" + fieldBuilder.toString() + "\n}\n"; } @@ -121,15 +121,9 @@ public class ContentBuilder { String tableDefPackage = StrUtil.buildTableDefPackage(entityClass); String tableDefClassName = entityClassName.concat(tableDefClassSuffix); importBuilder.append("import ").append(tableDefPackage).append('.').append(tableDefClassName).append(";\n"); - String schema = !StrUtil.isBlank(table.schema()) - ? table.schema() - : ""; - String tableName = !StrUtil.isBlank(table.value()) - ? table.value() - : StrUtil.firstCharToLowerCase(entityClassName); - 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(" = new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n"); + .append(" = new ").append(tableDefClassName).append("();\n"); } } \ No newline at end of file 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 dba7c3b3..93649a3c 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 @@ -24,7 +24,7 @@ import java.util.Objects; * @author 王帅 * @since 2023-07-01 */ -public class ColumnInfo { +public class ColumnInfo implements Comparable { /** * 属性名。 @@ -82,4 +82,12 @@ public class ColumnInfo { return property != null ? property.hashCode() : 0; } + @Override + public int compareTo(ColumnInfo o) { + // 先根据属性长度排序,属性名短的在上 + int compare = Integer.compare(property.length(), o.property.length()); + // 属性名长度一样,再按字母排序 + return compare == 0 ? property.compareTo(o.property) : compare; + } + } \ No newline at end of file