From 893cabc9bb0237ff46ccd1736d3201e2382d96dc Mon Sep 17 00:00:00 2001 From: chenjh3 Date: Thu, 12 Oct 2023 10:37:22 +0800 Subject: [PATCH] =?UTF-8?q?QueryColumnBehavior=E5=A2=9E=E5=8A=A0=E5=86=85?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E5=BF=BD=E7=95=A5=E8=A7=84=E5=88=99=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/base/querywrapper.md | 11 ++++++++--- .../mybatisflex/core/query/QueryColumnBehavior.java | 9 ++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/zh/base/querywrapper.md b/docs/zh/base/querywrapper.md index 7c89cc77..4dcb464c 100644 --- a/docs/zh/base/querywrapper.md +++ b/docs/zh/base/querywrapper.md @@ -1110,13 +1110,18 @@ QueryWrapper query2 = QueryWrapper.create() ## QueryColumnBehavior 在以上的内容中,我们知道 MyBatis-Flex 会自动忽略 `null` 值的条件,但是在实际开发中,有的开发者希望除了自动忽略 `null` -值以外,还可以自动忽略其他值,比如 `空字符串` 等。 +值以外,还可以自动忽略其他值,内置的规则有`null`(默认) 、`空字符串`、`空白字符串` ,当然也可以自定义。 -此时,我们可以通过配置 QueryColumnBehavior 来自定义忽略的值。如下的代码会自动忽略 `null` 和 `空字符串`: +此时,我们可以通过配置 QueryColumnBehavior 来自定义忽略的值。 ```java -QueryColumnBehavior.setIgnoreFunction(o -> o == null || "".equals(o)); +// 使用内置规则自动忽略 null 和 空字符串 +QueryColumnBehavior.setIgnoreFunction(QueryColumnBehavior.IGNORE_EMPTY); +// 使用内置规则自动忽略 null 和 空白字符串 +QueryColumnBehavior.setIgnoreFunction(QueryColumnBehavior.IGNORE_BLANK); +// 其他自定义规则 +QueryColumnBehavior.setIgnoreFunction(o -> {...}); ``` 另外,在某些场景下,开发者希望在构建 QueryWrapper 中,如果传入的值是集合或数组,则使用 `in` 逻辑,否则使用 `=`(等于) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumnBehavior.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumnBehavior.java index b6b7ceab..a8889a4e 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumnBehavior.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumnBehavior.java @@ -29,10 +29,17 @@ public class QueryColumnBehavior { private QueryColumnBehavior() { } + /** + * 内置的可选的忽略规则 + */ + public static final Predicate IGNORE_NULL = Objects::isNull; + public static final Predicate IGNORE_EMPTY = o -> o == null || "".equals(o); + public static final Predicate IGNORE_BLANK = o -> o == null || "".equals(o.toString().trim()); + /** * 自定义全局的自动忽略参数的方法。 */ - private static Predicate ignoreFunction = Objects::isNull; + private static Predicate ignoreFunction = IGNORE_NULL; /** * 当 {@code IN(...)} 条件只有 1 个参数时,是否自动把的内容转换为相等。