diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryTable.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryTable.java index 997ff216..19ce188b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryTable.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryTable.java @@ -41,6 +41,7 @@ public class QueryTable implements CloneSupport { this.tableDefHashCode = tableDef.hashCode(); this.schema = tableDef.getSchema(); this.name = tableDef.getTableName(); + this.alias = tableDef.getAlias(); } public QueryTable(String name) { 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 07bd1fc4..17c5fbce 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 @@ -24,16 +24,24 @@ import java.io.Serializable; */ public class TableDef implements Serializable { - private String schema; + private final String schema; + private final String tableName; + private final String alias; + public TableDef(String schema, String tableName) { + this(schema, tableName, null); + } + + public TableDef(String schema, String tableName, String alias) { this.schema = schema; this.tableName = tableName; + this.alias = alias; } public TableDef(String tableName) { - this.tableName = tableName; + this(null,tableName, null); } public String getTableName() { @@ -44,9 +52,15 @@ public class TableDef implements Serializable { return schema; } + public String getAlias() { + return alias; + } + + public QueryTable as(String alias) { return new QueryTable(schema, tableName, alias); } + } diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/TableDefTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/TableDefTest.java new file mode 100644 index 00000000..94c4d100 --- /dev/null +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/TableDefTest.java @@ -0,0 +1,23 @@ +package com.mybatisflex.coretest; + +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.coretest.table.AccountTableDef; +import org.junit.Assert; +import org.junit.Test; + +public class TableDefTest { + + @Test + public void testTableDefAlias() { + AccountTableDef account1 = AccountTableDef.ACCOUNT; + AccountTableDef account2 = AccountTableDef.ACCOUNT.withAlias("a2"); + String sql = new QueryWrapper().select(account1.AGE, account2.ID) + .from(account1) + .join(account2).on(account1.ID.eq(account2.ID)) + .toSQL(); + System.out.println(sql); + String expected = "SELECT `tb_account`.`age`, `a2`.`id` FROM `tb_account` " + + "JOIN `tb_account` AS `a2` ON `tb_account`.`id` = `a2`.`id`"; + Assert.assertEquals(expected, sql); + } +} 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 ee056724..3a19fcf4 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 @@ -136,6 +136,19 @@ public class ContentBuilder { : StrUtil.firstCharToLowerCase(tableInfo.getEntitySimpleName()); content.append(" public ").append(tableDefClassName).append("() {\n") .append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\");\n") + .append(" }\n\n"); + + content.append(" public ").append(tableDefClassName).append("(String alias) {\n") + .append(" super").append("(\"").append(schema).append("\", \"").append(tableName).append("\",alias);\n") + .append(" }\n"); + + //alias方法 + content.append("\n /**\n") + .append(" * 创建带别名的tableDef\n") + .append(" */\n"); + content.append(" public ").append(tableDefClassName).append(" withAlias").append("(String alias) {\n") + .append(" ").append(tableDefClassName).append(" cloned = new ").append(tableDefClassName).append("(").append("alias").append(");\n") + .append(" return cloned;\n") .append(" }\n\n}\n"); return content.toString(); }