From 6ffb2b23a17130eef1d97a45ac6bb8de760fd3cc Mon Sep 17 00:00:00 2001 From: chenjh3 Date: Thu, 12 Oct 2023 17:34:32 +0800 Subject: [PATCH] =?UTF-8?q?fix-bug:#I86T6H=20=E5=BD=93=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=BB=A1=E8=B6=B3=E5=BF=BD=E7=95=A5=E8=A7=84=E5=88=99=EF=BC=8C?= =?UTF-8?q?when=E5=8F=88=E8=AE=BE=E7=BD=AE=E4=B8=BAtrue=EF=BC=8CNPE?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/query/QueryCondition.java | 23 ++++++++++++++++--- .../coretest/DynamicConditionTest.java | 13 ++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) 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 ff17cd2f..a927ce92 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 @@ -46,9 +46,22 @@ public class QueryCondition implements CloneSupport { //两个条件直接的连接符 protected SqlConnector connector; + /** + * 是否为空条件,默认false + */ + private boolean empty = false; + + protected boolean notEmpty() { + return !empty; + } + + protected QueryCondition setEmpty(boolean empty) { + this.empty = empty; + return this; + } public static QueryCondition createEmpty() { - return new QueryCondition().when(false); + return new QueryCondition().when(false).setEmpty(true); } @@ -111,7 +124,9 @@ public class QueryCondition implements CloneSupport { * @return {@link QueryCondition} */ public QueryCondition when(boolean effective) { - this.effective = effective; + if (notEmpty()) { + this.effective = effective; + } return this; } @@ -123,7 +138,9 @@ public class QueryCondition implements CloneSupport { * @return {@link QueryCondition} */ public QueryCondition when(BooleanSupplier fn) { - this.effective = fn.getAsBoolean(); + if (notEmpty()) { + this.effective = fn.getAsBoolean(); + } return this; } 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 84fc86f9..bfab8f3b 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 @@ -20,7 +20,6 @@ import com.mybatisflex.core.constant.SqlConnector; import com.mybatisflex.core.query.*; import com.mybatisflex.core.util.StringUtil; import org.junit.Test; - import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -173,4 +172,16 @@ public class DynamicConditionTest { QueryColumnBehavior.setIgnoreFunction(Objects::isNull); } + @Test + public void test10() { + QueryWrapper queryWrapper = QueryWrapper.create() + .select() + .from(ACCOUNT) + // 满足忽略规则,但动态条件又是true + .where(ACCOUNT.USER_NAME.eq(null).when(true)); + String sql = queryWrapper.toSQL(); + System.out.println(sql); + assertEquals("SELECT * FROM `tb_account`", sql); + } + }