From 0e1467a77c45ce3d1920976b7db6d81b84563542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Fri, 22 Sep 2023 11:55:27 +0800 Subject: [PATCH] fix: apt generate code error if the entity class and field have the same name. --- .../processor/MybatisFlexProcessor.java | 4 ++ .../processor/builder/ContentBuilder.java | 25 ++++++++++-- .../java/com/mybatisflex/test/Account4.java | 38 +++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account4.java 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 a737c093..23e4d4cd 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 @@ -232,6 +232,10 @@ public class MybatisFlexProcessor extends AbstractProcessor { return SourceVersion.latestSupported(); } + + /** + * 通过 classElement 操作起所有字段,生成 ColumnInfo 并填充 columnInfos 结合 + */ private void fillColumnInfoList(Set columnInfos, List defaultColumns, TypeElement baseElement, TypeElement classElement, boolean camelToUnderline) { for (Element fieldElement : classElement.getEnclosedElements()) { 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 3bf30f6c..ee056724 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 @@ -69,6 +69,9 @@ 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"); + + //TableDef 类的属性名称 + String tableDefPropertyName = null; if (!allInTablesEnable) { String entityComment = tableInfo.getEntityComment(); if (!StrUtil.isBlank(entityComment)) { @@ -76,9 +79,13 @@ public class ContentBuilder { .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)) + tableDefPropertyName = StrUtil.buildFieldName(tableInfo.getEntitySimpleName().concat(tableDefInstanceSuffix != null ? tableDefInstanceSuffix.trim() : ""), tableDefPropertiesNameStyle); + content.append(" public static final ").append(tableDefClassName).append(' ').append(tableDefPropertyName) .append(" = new ").append(tableDefClassName).append("();\n\n"); } + + + String finalTableDefPropertyName = tableDefPropertyName; columnInfos.forEach(columnInfo -> { String comment = columnInfo.getComment(); if (!StrUtil.isBlank(comment)) { @@ -86,8 +93,16 @@ public class ContentBuilder { .append(" * ").append(comment.trim()).append("\n") .append(" */\n"); } + + // QueryColumn 属性定义的名称 + String columnPropertyName = StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle); + + //当字段名称和表名一样时,自动为字段添加一个小尾巴 "_",例如 account_ + if (columnPropertyName.equals(finalTableDefPropertyName)) { + columnPropertyName = columnPropertyName + "_"; + } content.append(" public final QueryColumn ") - .append(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)) + .append(columnPropertyName) .append(" = new QueryColumn(this, \"") .append(columnInfo.getColumn()).append("\""); if (columnInfo.getAlias() != null && columnInfo.getAlias().length > 0) { @@ -102,7 +117,11 @@ public class ContentBuilder { StringJoiner defaultColumnJoiner = new StringJoiner(", "); columnInfos.forEach(columnInfo -> { if (defaultColumns.contains(columnInfo.getColumn())) { - defaultColumnJoiner.add(StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle)); + String columnPropertyName = StrUtil.buildFieldName(columnInfo.getProperty(), tableDefPropertiesNameStyle); + if (columnPropertyName.equals(finalTableDefPropertyName)) { + columnPropertyName = columnPropertyName + "_"; + } + defaultColumnJoiner.add(columnPropertyName); } }); content.append("\n /**\n") diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account4.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account4.java new file mode 100644 index 00000000..4301f080 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account4.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.mybatisflex.test; + +import com.mybatisflex.annotation.Table; + +import java.io.Serializable; + +@Table(value = "tb_account_4") +public class Account4 extends Account2 implements Serializable { + + private static final long serialVersionUID = 1L; + + //字段名和类名相同 + private int account4; + + public int getAccount4() { + return account4; + } + + public void setAccount4(int account4) { + this.account4 = account4; + } +}