From 77821eadb38f36786f965539410d9a7b6f1a69af Mon Sep 17 00:00:00 2001 From: Schwi <39186981+cyb233@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:02:30 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`mybatis-flex-spring-boot?= =?UTF-8?q?3-starter`=E7=9A=84=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mybatis-flex-dependencies/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mybatis-flex-dependencies/pom.xml b/mybatis-flex-dependencies/pom.xml index 703b23d9..3e97ca67 100644 --- a/mybatis-flex-dependencies/pom.xml +++ b/mybatis-flex-dependencies/pom.xml @@ -50,6 +50,11 @@ mybatis-flex-spring-boot-starter ${mybatis-flex.version} + + com.mybatis-flex + mybatis-flex-spring-boot3-starter + ${mybatis-flex.version} + From 1bd44a0de7e398214b301ee32e5038bf868291a2 Mon Sep 17 00:00:00 2001 From: farukonfly Date: Wed, 10 Jan 2024 00:46:58 +0800 Subject: [PATCH 2/5] =?UTF-8?q?Add:=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E6=96=B9=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/dialect/DialectFactory.java | 16 ++++++++++++++++ .../core/mybatis/MapperInvocationHandler.java | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java index cfb13564..c46802ff 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java @@ -18,6 +18,8 @@ package com.mybatisflex.core.dialect; import java.util.EnumMap; import java.util.Map; + +import com.mybatisflex.core.exception.MybatisFlexException; import org.apache.ibatis.util.MapUtil; import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.dialect.impl.CommonsDialectImpl; @@ -45,6 +47,7 @@ public class DialectFactory { * 通过设置当前线程的数据库类型,以达到在代码执行时随时切换方言的功能 */ private static final ThreadLocal dbTypeThreadLocal = new ThreadLocal<>(); + private static DbType dbTypeGlobal = null ; /** @@ -75,6 +78,19 @@ public class DialectFactory { return dbTypeThreadLocal.get(); } + public static DbType getGlobalDbType() { + return dbTypeGlobal; + } + + public static void setGlobalDbType(DbType dbType) { + if(dbTypeGlobal == null&&dbType!=null){ + dbTypeGlobal = dbType ; + }else if(dbTypeGlobal != null){ + throw new MybatisFlexException("dbTypeGlobal is only set once"); + }else if(dbType==null){ + throw new MybatisFlexException("dbType can not be null"); + } + } /** * 清除当前线程的 dbType diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java index b61464c8..cad1f7f7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java @@ -76,6 +76,11 @@ public class MapperInvocationHandler implements InvocationHandler { //优先获取用户自己配置的 dbType DbType dbType = DialectFactory.getHintDbType(); + DbType dbTypeGlobal = DialectFactory.getGlobalDbType(); + //当前线程没有设置dbType,但是全局设置了dbTypeGlobal,那么就使用全局的dbTypeGlobal + if(dbTypeGlobal!=null&&dbType==null){ + dbType = dbTypeGlobal ; + } if (dbType == null) { if (dataSourceKey != null && dataSource != null) { dbType = dataSource.getDbType(dataSourceKey); From 7ca2c78be20b108cb9648c1e07def3767233a30f Mon Sep 17 00:00:00 2001 From: Font_C <1020331126@qq.com> Date: Wed, 10 Jan 2024 16:43:54 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=20Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8Dexists?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=94=9F=E6=88=90=E8=AF=AD=E5=8F=A5selectOne?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=B2=A1=E5=88=AB=E5=90=8D=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98=E3=80=82=20=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E5=86=85=E5=AE=B9=E8=A7=81issure=20#255?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/query/QueryMethods.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java index 190b74e7..e398a94d 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java @@ -2609,24 +2609,24 @@ public class QueryMethods { } /** - * SELECT 1 FROM table + * SELECT 1 as temp_one FROM table */ public static QueryWrapper selectOne() { - return select(column("1")); + return select(column("1").as("temp_one")); } /** - * SELECT COUNT(*) FROM table + * SELECT COUNT(*) as temp_count FROM table */ public static QueryWrapper selectCount() { - return select(count()); + return select(count().as("temp_count")); } /** - * SELECT COUNT(1) FROM table + * SELECT COUNT(1) as temp_count_one FROM table */ public static QueryWrapper selectCountOne() { - return select(count("1")); + return select(count("1").as("temp_count_one")); } /** From 60e218954bf215ab84185a184f63f887a6f8a524 Mon Sep 17 00:00:00 2001 From: Font_C <1020331126@qq.com> Date: Fri, 12 Jan 2024 14:29:06 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=20Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8DselectCo?= =?UTF-8?q?untOne=20=E5=9C=A8=E5=AD=90=E6=9F=A5=E8=AF=A2=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E4=BC=9A=E9=94=99=E8=AF=AF=E7=9A=84=E6=8B=BC=E6=8E=A5=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=88=AB=E5=90=8D=20issure#258?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/query/QueryMethods.java | 2 +- .../coretest/AccountSqlTester.java | 90 ++++++++++--------- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java index e398a94d..cc1d922f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java @@ -2626,7 +2626,7 @@ public class QueryMethods { * SELECT COUNT(1) as temp_count_one FROM table */ public static QueryWrapper selectCountOne() { - return select(count("1").as("temp_count_one")); + return select(count(new RawQueryColumn("1")).as("temp_count_one")); } /** 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 ab356574..90df1854 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 @@ -42,7 +42,7 @@ public class AccountSqlTester { .select() .from(ACCOUNT); - Assert.assertEquals("SELECT * FROM `tb_account`",query.toSQL()); + Assert.assertEquals("SELECT * FROM `tb_account`", query.toSQL()); } @Test @@ -51,7 +51,7 @@ public class AccountSqlTester { .select() .from(ACCOUNT01); - Assert.assertEquals("SELECT * FROM `flex`.`tb_a01`",query.toSQL()); + Assert.assertEquals("SELECT * FROM `flex`.`tb_a01`", query.toSQL()); } @Test @@ -68,7 +68,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` " + "LEFT JOIN `tb_account_01` ON `flex`.`tb_a01_01`.`id` = `tb_account_01`.`id` " + "WHERE `flex`.`tb_a01_01`.`id` >= 100 AND `tb_account_01`.`sex` = 1" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); // 重置dynamicTableProcessor,防止影响其他的测试用例 @@ -89,7 +89,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `flex`.`tb_a01_01` AS `a1` " + "LEFT JOIN `tb_account_01` ON `a1`.`id` = `tb_account_01`.`id` " + "WHERE `a1`.`id` >= 100 AND `tb_account_01`.`sex` = 1" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); // 重置dynamicTableProcessor,防止影响其他的测试用例 @@ -104,7 +104,7 @@ public class AccountSqlTester { .from(ACCOUNT); Assert.assertEquals("SELECT `id`, `user_name` FROM `tb_account`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -122,7 +122,7 @@ public class AccountSqlTester { "MAX(`a`.`age`) AS `ageMax` " + "FROM `tb_account` AS `a`, `tb_article` AS `b` " + "WHERE `a`.`id` = `b`.`account_id`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -137,7 +137,7 @@ public class AccountSqlTester { "MAX(`birthday`) AS `Max_BirthDay`, " + "AVG(`sex`) AS `sex_avg` " + "FROM `tb_account` AS `tableAlias`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -152,7 +152,7 @@ public class AccountSqlTester { "MAX(`birthday`) AS `Max_BirthDay`, " + "AVG(`sex`) AS `sex_avg` " + "FROM `tb_account` AS `tableAlias`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -162,13 +162,13 @@ public class AccountSqlTester { QueryWrapper query = new QueryWrapper() .select( new DistinctQueryColumn(ACCOUNT.SEX).as("sexDis")) - .select( ACCOUNT.USER_NAME.add(ACCOUNT.AGE).as("addAlias")) + .select(ACCOUNT.USER_NAME.add(ACCOUNT.AGE).as("addAlias")) .select(new RawQueryColumn("abc").as("aBc")) .from(ACCOUNT); Assert.assertEquals("SELECT DISTINCT `sex` AS `sexDis`, (`user_name` + `age`) AS `addAlias`, abc AS `aBc` " + "FROM `tb_account`" - ,query.toSQL()); + , query.toSQL()); System.out.println("sql = " + query.toSQL()); @@ -182,7 +182,7 @@ public class AccountSqlTester { .from(ACCOUNT); Assert.assertEquals("SELECT * FROM `tb_account`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -200,7 +200,7 @@ public class AccountSqlTester { Assert.assertEquals("(SELECT `id` FROM `tb_account` ORDER BY `id` DESC) " + "UNION (SELECT `id` FROM `tb_article`) " + "UNION ALL (SELECT `id` FROM `tb_article`)" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -216,7 +216,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account` " + "WHERE `id` >= 100 AND `user_name` LIKE '%michael%'" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -231,7 +231,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT A.*, b.x FROM `tb_account` " + "WHERE `id` >= 100 AND aaa IN ('michael', 'aaa')" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -249,13 +249,11 @@ public class AccountSqlTester { .or(ACCOUNT.SEX.eq(1).and(ACCOUNT.BIRTHDAY.eq(2))); String sql = "SELECT * FROM `tb_account` WHERE `id` >= 100 OR (`birthday` = 1) OR (`sex` = 1 AND `birthday` = 2)"; - Assert.assertEquals(sql,query.toSQL()); + Assert.assertEquals(sql, query.toSQL()); System.out.println(query.toSQL()); } - - @Test public void testWhereCond1Sql() { boolean flag = false; @@ -266,7 +264,7 @@ public class AccountSqlTester { .and(ACCOUNT.USER_NAME.like("michael")); Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE '%michael%'" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -281,7 +279,7 @@ public class AccountSqlTester { .and(ACCOUNT.USER_NAME.notLike("michael")); Assert.assertEquals("SELECT * FROM `tb_account` WHERE `id` >= 100 AND `user_name` NOT LIKE '%michael%'" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -297,7 +295,7 @@ public class AccountSqlTester { .and(ACCOUNT.USER_NAME.like("michael")); Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE '%michael%'" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -318,11 +316,21 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account` " + "WHERE `id` >= 100 " + "AND EXISTS (SELECT 1 FROM `tb_article` AS `a` WHERE `id` >= 100)" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } + @Test + public void testSelectCountOne() { + QueryWrapper query = selectCountOne() + .from(ARTICLE); + Assert.assertEquals("SELECT COUNT(1) AS `temp_count_one` FROM `tb_article`" + , query.toSQL()); + System.out.println(query.toSQL()); + + + } @Test public void testWhereAndOrSql() { @@ -337,7 +345,7 @@ public class AccountSqlTester { "WHERE `id` >= 100 " + "AND (`sex` = 1 OR `sex` = 2) " + "OR (`age` IN (18, 19, 20) OR `user_name` LIKE '%michael%')" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -354,7 +362,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account`" + " WHERE `id` >= (SELECT `account_id` FROM `tb_article` WHERE `id` >= 100)" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -367,7 +375,7 @@ public class AccountSqlTester { .groupBy(ACCOUNT.USER_NAME); Assert.assertEquals("SELECT * FROM `tb_account` GROUP BY `user_name`" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -383,7 +391,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account` AS `a`, `flex`.`tb_a01` AS `b` " + "GROUP BY YEAR(`a`.`birthday`)" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -391,14 +399,14 @@ public class AccountSqlTester { //https://gitee.com/mybatis-flex/mybatis-flex/issues/I7EAY9 @Test public void testGroup184() { - QueryWrapper query = QueryWrapper .create() + QueryWrapper query = QueryWrapper.create() .select(left(ACCOUNT.AGE, 6).as("regionCode")) .from(ACCOUNT) .groupBy("regionCode"); Assert.assertEquals("SELECT LEFT(`age`, 6) AS `regionCode` FROM `tb_account` " + "GROUP BY regionCode" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -414,7 +422,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account` " + "GROUP BY `user_name` " + "HAVING `age` BETWEEN 18 AND 25 " - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -431,7 +439,7 @@ public class AccountSqlTester { "LEFT JOIN `tb_article` " + "ON `tb_account`.`id` = `tb_article`.`account_id` " + "WHERE `tb_account`.`age` >= 10" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -450,7 +458,7 @@ public class AccountSqlTester { "LEFT JOIN `tb_article` " + "ON `tb_account`.`id` = `tb_article`.`account_id` AND `tb_account`.`age` = 18 " + "WHERE `tb_account`.`age` >= 10" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -471,7 +479,7 @@ public class AccountSqlTester { "LEFT JOIN (SELECT * FROM `tb_article` WHERE `id` >= 100) AS `a` " + "ON `tb_account`.`id` = a.id " + "WHERE `tb_account`.`age` >= 10" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -496,7 +504,7 @@ public class AccountSqlTester { "LEFT JOIN `base_admin_user_info` AS `burmc` " + "ON burmc.user_id = burm.created_by " + "WHERE bui.is_valid = 3 " - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -540,7 +548,7 @@ public class AccountSqlTester { Assert.assertEquals("SELECT * FROM `tb_account` " + "ORDER BY `age` ASC, `user_name` DESC NULLS LAST" - ,query.toSQL()); + , query.toSQL()); System.out.println(query.toSQL()); } @@ -552,7 +560,7 @@ public class AccountSqlTester { String sql = dialect.forDeleteEntityById(tableInfo); Assert.assertEquals("UPDATE `tb_account` SET `is_delete` = 1 WHERE `id` = ? AND `is_delete` = 0" - ,sql); + , sql); System.out.println(sql); } @@ -564,14 +572,14 @@ public class AccountSqlTester { @Test public void testDeleteWithJoin() { QueryWrapper qw = QueryWrapper.create() - .from(ACCOUNT).leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) - .where(ACCOUNT.USER_NAME.eq("x")); + .from(ACCOUNT).leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) + .where(ACCOUNT.USER_NAME.eq("x")); IDialect dialect = new CommonsDialectImpl(); String sql = dialect.forDeleteByQuery(qw); Assert.assertEquals("DELETE `tb_account` FROM `tb_account` " + "LEFT JOIN `tb_article` ON `tb_account`.`id` = `tb_article`.`account_id` " + "WHERE `tb_account`.`user_name` = ?" - ,sql); + , sql); System.out.println(sql); } @@ -588,7 +596,7 @@ public class AccountSqlTester { String sql = dialect.forSelectByQuery(queryWrapper); Assert.assertEquals("SELECT * FROM `tb_account` WHERE `user_name` LIKE ? FOR UPDATE" - ,sql); + , sql); System.out.println(sql); } @@ -611,7 +619,7 @@ public class AccountSqlTester { "FROM `tb_account` " + "WHERE `user_name` LIKE ? " + "AND CONVERT(NVARCHAR(30), GETDATE(), 126) IN (SELECT `id` FROM `tb_account` WHERE `id` >= ?)" - ,sql); + , sql); System.out.println(sql); } @@ -791,7 +799,7 @@ public class AccountSqlTester { "AND `sex` = 0 " + "AND `age` = 18 " + "AND `is_normal` = false" - ,qw.toSQL()); + , qw.toSQL()); System.out.println(qw.toSQL()); } @@ -814,7 +822,7 @@ public class AccountSqlTester { "ND `sex` = 0 " + "AND `age` >= 18 " + "AND `is_normal` = false" - ,qw.toSQL()); + , qw.toSQL()); System.out.println(qw.toSQL()); } } From 0a00dd739c1dfd3ff658dcf4c6d841fd7c7b6d9b Mon Sep 17 00:00:00 2001 From: Font_C <1020331126@qq.com> Date: Fri, 12 Jan 2024 14:34:38 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=20Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8DselectCo?= =?UTF-8?q?untOne=20=E5=9C=A8=E5=AD=90=E6=9F=A5=E8=AF=A2=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E4=BC=9A=E9=94=99=E8=AF=AF=E7=9A=84=E6=8B=BC=E6=8E=A5=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=88=AB=E5=90=8D=20issure#258?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/com/mybatisflex/coretest/AccountSqlTester.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 90df1854..fecafb57 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 @@ -327,9 +327,8 @@ public class AccountSqlTester { .from(ARTICLE); Assert.assertEquals("SELECT COUNT(1) AS `temp_count_one` FROM `tb_article`" , query.toSQL()); + System.out.println(query.toSQL()); - - } @Test