From 7ebd514436832dd861d2ef034b837d99ac1f7bec Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Mon, 11 Mar 2024 21:17:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20TableDef=20?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E7=BC=93=E5=AD=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/table/TableDef.java | 15 ++++++++++++--- .../mybatisflex/coretest/AccountSqlTester.java | 1 + .../processor/builder/ContentBuilder.java | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableDef.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableDef.java index 55b94d30..96cf7c1b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableDef.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableDef.java @@ -18,13 +18,16 @@ package com.mybatisflex.core.table; import com.mybatisflex.core.query.QueryTable; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; + /** * 表定义,内包含字段。 * * @author 王帅 * @since 2024-03-11 */ -@Deprecated public abstract class TableDef extends QueryTable { protected TableDef(String schema, String tableName) { @@ -36,13 +39,19 @@ public abstract class TableDef extends QueryTable { } /** - * 使用 {@link #getName()} 替代。 + * 兼容方法,与 {@link #getName()} 相同。 * * @return 表名 */ - @Deprecated public String getTableName() { return name; } + private static final Map CACHE = new ConcurrentHashMap<>(); + + @SuppressWarnings("unchecked") + protected static V getCache(String key, Function mappingFunction) { + return (V) CACHE.computeIfAbsent(key, mappingFunction); + } + } diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java index f3d59222..113e4cbd 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java @@ -64,6 +64,7 @@ public class AccountSqlTester { " LEFT JOIN ` tb_account ` AS ` a1 ` ON ` a1 `.` id ` = ` ar `.` account_id `\n" + " LEFT JOIN ` tb_account ` AS ` a2 ` ON ` a2 `.` id ` = ` ar `.` account_id `", sql); System.out.println(sql); + System.out.println(a1 == ACCOUNT.as("a1")); } @Test 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 8b1d04f8..3c5032af 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 @@ -143,7 +143,8 @@ public class ContentBuilder { .append(" }\n\n"); content.append(" public ").append(tableDefClassName).append(" as(String alias) {\n") - .append(" return new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\", alias);\n") + .append(" String key = getNameWithSchema() + \".\" + alias;\n") + .append(" return getCache(key, k -> new ").append(tableDefClassName).append("(\"").append(schema).append("\", \"").append(tableName).append("\", alias));\n") .append(" }\n\n}\n"); return content.toString(); }