From 087561f9364f9c6a3b7b4450ea01425241f1b6f9 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:43:15 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8B=E4=B8=80=E4=B8=AA=E7=94=9F=E6=95=88=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/query/QueryCondition.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java index 0e993a8a..a049e911 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java @@ -240,6 +240,13 @@ public class QueryCondition implements CloneSupport { return prev.checkEffective() ? prev : prev.getPrevEffectiveCondition(); } + protected QueryCondition getNextEffectiveCondition() { + if (next == null) { + return null; + } + return next.checkEffective() ? next : next.getNextEffectiveCondition(); + } + protected void appendQuestionMark(StringBuilder sqlBuilder) { //noinspection StatementWithEmptyBody From 1f4dcff8b6291978d4543f9c463f7f115c96ba2c Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:43:55 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=81=8D?= =?UTF-8?q?=E5=8E=86=20where=20=E6=9D=A1=E4=BB=B6=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/mybatisflex/core/query/CPI.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/CPI.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/CPI.java index 1894336f..93c8cb8f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/CPI.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/CPI.java @@ -133,11 +133,22 @@ public class CPI { queryWrapper.addJoin(join); } + public static QueryCondition getPrevCondition(QueryCondition queryCondition) { + return queryCondition.getPrevEffectiveCondition(); + } + + public static QueryCondition getNextCondition(QueryCondition queryCondition) { + return queryCondition.getNextEffectiveCondition(); + } public static QueryCondition getWhereQueryCondition(QueryWrapper queryWrapper) { return queryWrapper.getWhereQueryCondition(); } + public static void setWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition) { + queryWrapper.setWhereQueryCondition(queryCondition); + } + public static void addWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition, SqlConnector connector) { queryWrapper.addWhereQueryCondition(queryCondition, connector); } From 96c96d21efac51885dde656b8bc0660ccf1488e6 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:44:39 +0800 Subject: [PATCH 3/6] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=B7=BB=E5=8A=A0=20where=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coretest/DynamicConditionTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java index ce020d6d..90c4f4ee 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java @@ -16,7 +16,10 @@ package com.mybatisflex.coretest; +import com.mybatisflex.core.query.CPI; +import com.mybatisflex.core.query.QueryTable; import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.query.SqlConnector; import com.mybatisflex.core.util.CollectionUtil; import com.mybatisflex.core.util.StringUtil; import org.junit.Test; @@ -79,4 +82,22 @@ public class DynamicConditionTest { System.out.println(sql); } + @Test + public void test05() { + QueryWrapper queryWrapper = QueryWrapper.create() + .from(ACCOUNT) + .where(ACCOUNT.ID.in(1, 2, 3)); + + boolean anyMatch = CPI.getQueryTables(queryWrapper) + .stream() + .map(QueryTable::getName) + .anyMatch(tableName -> tableName.equals(ACCOUNT.getTableName())); + + if (anyMatch) { + CPI.addWhereQueryCondition(queryWrapper, ACCOUNT.AGE.ge(18), SqlConnector.AND); + } + + System.out.println(queryWrapper.toSQL()); + } + } From 5b082793cb992fdf070feb5e0965ce28fbd07b35 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:45:30 +0800 Subject: [PATCH 4/6] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8F=96=E6=B6=88=20where=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coretest/DynamicConditionTest.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java index 90c4f4ee..782024ea 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java @@ -16,10 +16,7 @@ package com.mybatisflex.coretest; -import com.mybatisflex.core.query.CPI; -import com.mybatisflex.core.query.QueryTable; -import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.core.query.SqlConnector; +import com.mybatisflex.core.query.*; import com.mybatisflex.core.util.CollectionUtil; import com.mybatisflex.core.util.StringUtil; import org.junit.Test; @@ -100,4 +97,21 @@ public class DynamicConditionTest { System.out.println(queryWrapper.toSQL()); } + @Test + public void test06() { + QueryWrapper queryWrapper = QueryWrapper.create() + .from(ACCOUNT) + .where(ACCOUNT.ID.in(1, 2, 3)) + .and(ACCOUNT.AGE.ge(18)) + .or(ACCOUNT.USER_NAME.eq("zhang san")); + + for (QueryCondition condition = CPI.getWhereQueryCondition(queryWrapper); condition != null; condition = CPI.getNextCondition(condition)) { + if (condition.getColumn().getName().equals(ACCOUNT.AGE.getName())) { + condition.when(false); + } + } + + System.out.println(queryWrapper.toSQL()); + } + } From 83354bc1bf20d826844038a452c660f4739546ef Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:46:09 +0800 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=8B=AC=E5=8F=B7?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/query/Brackets.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java index 0d6344ee..9617f4b9 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java @@ -20,6 +20,8 @@ import com.mybatisflex.core.util.ObjectUtil; import com.mybatisflex.core.util.StringUtil; import java.util.List; +import java.util.function.BooleanSupplier; +import java.util.function.Predicate; /** * 括号 @@ -32,6 +34,59 @@ public class Brackets extends QueryCondition { this.childCondition = childCondition; } + @Override + public QueryColumn getColumn() { + return childCondition.getColumn(); + } + + @Override + public void setColumn(QueryColumn column) { + childCondition.setColumn(column); + } + + @Override + public void setValue(Object value) { + childCondition.setValue(value); + } + + @Override + public String getLogic() { + return childCondition.getLogic(); + } + + @Override + public void setLogic(String logic) { + childCondition.setLogic(logic); + } + + @Override + public QueryCondition when(boolean effective) { + return childCondition.when(effective); + } + + @Override + public QueryCondition when(BooleanSupplier fn) { + return childCondition.when(fn); + } + + /** + * @deprecated 继承自标记删除的方法 + */ + @Override + @Deprecated + public QueryCondition when(Predicate fn) { + return childCondition.when(fn); + } + + @Override + protected QueryCondition getPrevEffectiveCondition() { + return childCondition.getPrevEffectiveCondition(); + } + + @Override + protected QueryCondition getNextEffectiveCondition() { + return childCondition.getNextEffectiveCondition(); + } @Override public QueryCondition and(QueryCondition nextCondition) { From b18b7b9615e51d07d8e717d270d7fdcd7e4cd103 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sun, 13 Aug 2023 16:46:40 +0800 Subject: [PATCH 6/6] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=8B=AC=E5=8F=B7=E5=86=85=E7=9A=84=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coretest/DynamicConditionTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java index 782024ea..590965ec 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/DynamicConditionTest.java @@ -114,4 +114,21 @@ public class DynamicConditionTest { System.out.println(queryWrapper.toSQL()); } + @Test + public void test07() { + QueryWrapper queryWrapper = QueryWrapper.create() + .from(ACCOUNT) + .where(ACCOUNT.ID.in(1, 2, 3) + .and(ACCOUNT.AGE.ge(18)) + .or(ACCOUNT.USER_NAME.eq("zhang san"))); + + for (QueryCondition condition = CPI.getWhereQueryCondition(queryWrapper); condition != null; condition = CPI.getNextCondition(condition)) { + if (condition.getColumn().getName().equals(ACCOUNT.AGE.getName())) { + condition.when(false); + } + } + + System.out.println(queryWrapper.toSQL()); + } + }