From c8f66121048ad0fc417c6c4d0298130b219887e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E5=AE=87?= Date: Mon, 5 May 2025 10:17:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(mybatis):=20=E4=BC=98=E5=8C=96=20MPJLa?= =?UTF-8?q?mbdaWrapperX=20=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了未使用的 import 语句- 更新了泛型参数,使代码更加通用和安全 - 添加了新的 betweenIfPresent 方法,支持更灵活的条件判断 -重写了 leftJoin、rightJoin 和 innerJoin 方法,使它们返回当前类型 - 新增了带有扩展参数的 Join 方法,支持更复杂的查询需求 --- .../mybatis/core/query/MPJLambdaWrapperX.java | 104 ++++++++++++++---- 1 file changed, 81 insertions(+), 23 deletions(-) diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java index 933451865..f21e97c6c 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java @@ -4,7 +4,6 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.github.yulichang.toolkit.MPJWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.util.StringUtils; @@ -20,89 +19,111 @@ import java.util.function.Consumer; */ public class MPJLambdaWrapperX extends MPJLambdaWrapper { - public MPJLambdaWrapperX likeIfPresent(SFunction column, String val) { - MPJWrappers.lambdaJoin().like(column, val); + // SFunction column 只能用于主表字段 联表字段报错 +// SFunction column + 泛型 支持任意类字段(主表、子表、三表) 推荐写法, 让编译器自动推断 S 类型 + public MPJLambdaWrapperX likeIfPresent(SFunction column, String val) { if (StringUtils.hasText(val)) { return (MPJLambdaWrapperX) super.like(column, val); } return this; } - public MPJLambdaWrapperX inIfPresent(SFunction column, Collection values) { + public MPJLambdaWrapperX inIfPresent(SFunction column, Collection values) { if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { return (MPJLambdaWrapperX) super.in(column, values); } return this; } - public MPJLambdaWrapperX inIfPresent(SFunction column, Object... values) { + public MPJLambdaWrapperX inIfPresent(SFunction column, Object... values) { if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { return (MPJLambdaWrapperX) super.in(column, values); } return this; } - public MPJLambdaWrapperX eqIfPresent(SFunction column, Object val) { - if (ObjectUtil.isNotEmpty(val)) { + public MPJLambdaWrapperX eqIfPresent(SFunction column, Object val) { + if (val != null) { return (MPJLambdaWrapperX) super.eq(column, val); } return this; } - public MPJLambdaWrapperX neIfPresent(SFunction column, Object val) { + public MPJLambdaWrapperX neIfPresent(SFunction column, Object val) { if (ObjectUtil.isNotEmpty(val)) { return (MPJLambdaWrapperX) super.ne(column, val); } return this; } - public MPJLambdaWrapperX gtIfPresent(SFunction column, Object val) { + public MPJLambdaWrapperX gtIfPresent(SFunction column, Object val) { if (val != null) { return (MPJLambdaWrapperX) super.gt(column, val); } return this; } - public MPJLambdaWrapperX geIfPresent(SFunction column, Object val) { + public MPJLambdaWrapperX geIfPresent(SFunction column, Object val) { if (val != null) { return (MPJLambdaWrapperX) super.ge(column, val); } return this; } - public MPJLambdaWrapperX ltIfPresent(SFunction column, Object val) { + public MPJLambdaWrapperX ltIfPresent(SFunction column, Object val) { if (val != null) { return (MPJLambdaWrapperX) super.lt(column, val); } return this; } - public MPJLambdaWrapperX leIfPresent(SFunction column, Object val) { + public MPJLambdaWrapperX leIfPresent(SFunction column, Object val) { if (val != null) { return (MPJLambdaWrapperX) super.le(column, val); } return this; } - public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object val1, Object val2) { + /** + * @param sqlExpr sql + * @param values 值 + * @return this + * @author 李方捷 + */ + public MPJLambdaWrapperX betweenIfPresent(String sqlExpr, Object[] values) { + Object val1 = ArrayUtils.get(values, 0); + Object val2 = ArrayUtils.get(values, 1); if (val1 != null && val2 != null) { - return (MPJLambdaWrapperX) super.between(column, val1, val2); + return (MPJLambdaWrapperX) super.between(sqlExpr, val1, val2); + } else if (val1 != null) { + return (MPJLambdaWrapperX) ge(sqlExpr, val1); + } else if (val2 != null) { + return (MPJLambdaWrapperX) le(sqlExpr, val2); + } else { + return this; } - if (val1 != null) { - return (MPJLambdaWrapperX) ge(column, val1); - } - if (val2 != null) { - return (MPJLambdaWrapperX) le(column, val2); - } - return this; } - public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object[] values) { + public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object[] values) { Object val1 = ArrayUtils.get(values, 0); Object val2 = ArrayUtils.get(values, 1); return betweenIfPresent(column, val1, val2); } + public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (MPJLambdaWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (MPJLambdaWrapperX) super.ge(column, val1); + } + if (val2 != null) { + return (MPJLambdaWrapperX) super.le(column, val2); + } + return this; + } + + // ========== 重写父类方法,方便链式调用 ========== @Override @@ -310,4 +331,41 @@ public class MPJLambdaWrapperX extends MPJLambdaWrapper { return this; } -} \ No newline at end of file + // ========== 关键重写:使 leftJoin 返回当前类型 this ========== + @Override + public MPJLambdaWrapperX leftJoin(Class clazz, SFunction left, SFunction right) { + super.leftJoin(clazz, left, right); + return this; + } + + @Override + public MPJLambdaWrapperX rightJoin(Class clazz, SFunction left, SFunction right) { + super.rightJoin(clazz, left, right); + return this; + } + + @Override + public MPJLambdaWrapperX innerJoin(Class clazz, SFunction left, SFunction right) { + super.innerJoin(clazz, left, right); + return this; + } + + // ========== 添加扩展 Join 支持 ext 函数式参数 ========== + public MPJLambdaWrapperX leftJoin(Class clazz, SFunction left, SFunction right, Consumer> ext) { + super.leftJoin(clazz, left, right); + if (ext != null) ext.accept(this); + return this; + } + + public MPJLambdaWrapperX rightJoin(Class clazz, SFunction left, SFunction right, Consumer> ext) { + super.rightJoin(clazz, left, right); + if (ext != null) ext.accept(this); + return this; + } + + public MPJLambdaWrapperX innerJoin(Class clazz, SFunction left, SFunction right, Consumer> ext) { + super.innerJoin(clazz, left, right); + if (ext != null) ext.accept(this); + return this; + } +} From 6a5a643b18cdbc09abfee5c9f8146294d267a3c6 Mon Sep 17 00:00:00 2001 From: fish steak <45394169+fishSteak@users.noreply.github.com> Date: Mon, 5 May 2025 10:21:48 +0800 Subject: [PATCH 2/4] Update MPJLambdaWrapperX.java --- .../yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java index f21e97c6c..5197a918b 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java @@ -14,13 +14,11 @@ import java.util.function.Consumer; * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能: *

* 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 - * + * SFunction column + 泛型 支持任意类字段(主表、子表、三表) 推荐写法, 让编译器自动推断 S 类型 * @param 数据类型 */ public class MPJLambdaWrapperX extends MPJLambdaWrapper { - // SFunction column 只能用于主表字段 联表字段报错 -// SFunction column + 泛型 支持任意类字段(主表、子表、三表) 推荐写法, 让编译器自动推断 S 类型 public MPJLambdaWrapperX likeIfPresent(SFunction column, String val) { if (StringUtils.hasText(val)) { return (MPJLambdaWrapperX) super.like(column, val); From 92d301299575efedf81a9cc5cd9c99951e9895d5 Mon Sep 17 00:00:00 2001 From: fish steak <45394169+fishSteak@users.noreply.github.com> Date: Mon, 5 May 2025 10:25:34 +0800 Subject: [PATCH 3/4] Update MPJLambdaWrapperX.java --- .../yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java index 5197a918b..7633b981b 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java @@ -41,7 +41,7 @@ public class MPJLambdaWrapperX extends MPJLambdaWrapper { } public MPJLambdaWrapperX eqIfPresent(SFunction column, Object val) { - if (val != null) { + if (ObjectUtil.isNotEmpty(val)) { return (MPJLambdaWrapperX) super.eq(column, val); } return this; From 2890279e3d59ee0572169c290e2ef12aba9e0724 Mon Sep 17 00:00:00 2001 From: fish steak <45394169+fishSteak@users.noreply.github.com> Date: Mon, 5 May 2025 10:26:10 +0800 Subject: [PATCH 4/4] Update MPJLambdaWrapperX.java --- .../mybatis/core/query/MPJLambdaWrapperX.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java index 7633b981b..1f0b74bf3 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java @@ -82,26 +82,6 @@ public class MPJLambdaWrapperX extends MPJLambdaWrapper { return this; } - /** - * @param sqlExpr sql - * @param values 值 - * @return this - * @author 李方捷 - */ - public MPJLambdaWrapperX betweenIfPresent(String sqlExpr, Object[] values) { - Object val1 = ArrayUtils.get(values, 0); - Object val2 = ArrayUtils.get(values, 1); - if (val1 != null && val2 != null) { - return (MPJLambdaWrapperX) super.between(sqlExpr, val1, val2); - } else if (val1 != null) { - return (MPJLambdaWrapperX) ge(sqlExpr, val1); - } else if (val2 != null) { - return (MPJLambdaWrapperX) le(sqlExpr, val2); - } else { - return this; - } - } - public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object[] values) { Object val1 = ArrayUtils.get(values, 0); Object val2 = ArrayUtils.get(values, 1);