From 35384a02c16d9e91b4adbf0b0bcc9d8de5f07995 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, 17 Mar 2023 09:02:29 +0800 Subject: [PATCH] QueryWrapper.from support multi table --- .../mybatisflex/core/query/QueryWrapper.java | 38 ++++++++++++------- .../mybatisflex/test/AccountSqlTester.java | 13 +++++++ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java index 28d41ca5..3c4ad15c 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java @@ -21,6 +21,7 @@ import com.mybatisflex.core.util.ArrayUtil; import com.mybatisflex.core.util.CollectionUtil; import java.util.ArrayList; +import java.util.Arrays; import java.util.Map; public class QueryWrapper extends BaseQueryWrapper { @@ -40,29 +41,37 @@ public class QueryWrapper extends BaseQueryWrapper { } - public QueryWrapper from(TableDef tableDef) { - return from(tableDef.getTableName()); + public QueryWrapper from(TableDef... tableDefs) { + for (TableDef tableDef : tableDefs) { + from(new QueryTable(tableDef.getTableName())); + } + return this; } - public QueryWrapper from(String table) { - return from(new QueryTable(table)); + public QueryWrapper from(String... tables) { + for (String table : tables) { + from(new QueryTable(table)); + } + return this; } - public QueryWrapper from(QueryTable table) { + public QueryWrapper from(QueryTable... tables) { if (CollectionUtil.isEmpty(queryTables)) { queryTables = new ArrayList<>(); - queryTables.add(table); + queryTables.addAll(Arrays.asList(tables)); } else { - boolean contains = false; - for (QueryTable queryTable : queryTables) { - if (queryTable.isSameTable(table)) { - contains = true; + for (QueryTable table : tables) { + boolean contains = false; + for (QueryTable queryTable : queryTables) { + if (queryTable.isSameTable(table)) { + contains = true; + } + } + if (!contains) { + queryTables.add(table); } - } - if (!contains) { - queryTables.add(table); } } return this; @@ -73,6 +82,7 @@ public class QueryWrapper extends BaseQueryWrapper { return from(new SelectQueryTable(queryWrapper)); } + public QueryWrapper as(String alias) { if (CollectionUtil.isEmpty(queryTables)) { throw new IllegalArgumentException("query table must not be empty."); @@ -212,6 +222,7 @@ public class QueryWrapper extends BaseQueryWrapper { public Joiner fullJoinIf(QueryWrapper table, boolean condition) { return joining(Join.TYPE_FULL, table, condition); } + public Joiner crossJoin(String table) { return joining(Join.TYPE_CROSS, table, true); } @@ -229,7 +240,6 @@ public class QueryWrapper extends BaseQueryWrapper { } - protected Joiner joining(String type, String table, boolean condition) { Join join = new Join(type, table, condition); addJoinTable(join.getQueryTable()); diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/test/AccountSqlTester.java b/mybatis-flex-core/src/test/java/com/mybatisflex/test/AccountSqlTester.java index bf592e01..a8ba0c0e 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/test/AccountSqlTester.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/test/AccountSqlTester.java @@ -41,6 +41,19 @@ public class AccountSqlTester { System.out.println(sql); } + @Test + public void testSelect1ColumnsSql() { + QueryWrapper query = new QueryWrapper() + .select(ACCOUNT.ID, ACCOUNT.USER_NAME, + ARTICLE.ID.as("articleId"), ARTICLE.TITLE) + .from(ACCOUNT.as("a"), ARTICLE.as("b")) + .where(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)); + + IDialect dialect = new CommonsDialectImpl(KeywordWrap.NONE,LimitOffsetProcesser.MYSQL); + String sql = dialect.forSelectListByQuery(query); + System.out.println(sql); + } + @Test public void testSelectColumnsAndFunctionsSql() { QueryWrapper query = new QueryWrapper()