Commit 69da106b9ee6540a32c6a09f773a1405aecf4080
1 parent
1cf079fe
reactor:增强MPJLambdaWrapperX 类,左连接后可以使用betweenIfPresent等
Showing
1 changed file
with
57 additions
and
21 deletions
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; |
| 4 | 4 | import cn.hutool.core.util.ObjectUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; |
| 6 | 6 | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| 7 | -import com.github.yulichang.toolkit.MPJWrappers; | |
| 8 | 7 | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| 9 | 8 | import org.springframework.util.StringUtils; |
| 10 | 9 | |
| ... | ... | @@ -15,93 +14,93 @@ import java.util.function.Consumer; |
| 15 | 14 | * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能: |
| 16 | 15 | * <p> |
| 17 | 16 | * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 |
| 18 | - * | |
| 17 | + * 2. SFunction<S, ?> column + <S> 泛型:支持任意类字段(主表、子表、三表),推荐写法, 让编译器自动推断 S 类型 | |
| 19 | 18 | * @param <T> 数据类型 |
| 20 | 19 | */ |
| 21 | 20 | public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> { |
| 22 | 21 | |
| 23 | - public <R> MPJLambdaWrapperX<T> likeIfPresent(SFunction<R, ?> column, String val) { | |
| 24 | - MPJWrappers.lambdaJoin().like(column, val); | |
| 22 | + public <S> MPJLambdaWrapperX<T> likeIfPresent(SFunction<S, ?> column, String val) { | |
| 25 | 23 | if (StringUtils.hasText(val)) { |
| 26 | 24 | return (MPJLambdaWrapperX<T>) super.like(column, val); |
| 27 | 25 | } |
| 28 | 26 | return this; |
| 29 | 27 | } |
| 30 | 28 | |
| 31 | - public <R> MPJLambdaWrapperX<T> inIfPresent(SFunction<R, ?> column, Collection<?> values) { | |
| 29 | + public <S> MPJLambdaWrapperX<T> inIfPresent(SFunction<S, ?> column, Collection<?> values) { | |
| 32 | 30 | if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { |
| 33 | 31 | return (MPJLambdaWrapperX<T>) super.in(column, values); |
| 34 | 32 | } |
| 35 | 33 | return this; |
| 36 | 34 | } |
| 37 | 35 | |
| 38 | - public <R> MPJLambdaWrapperX<T> inIfPresent(SFunction<R, ?> column, Object... values) { | |
| 36 | + public <S> MPJLambdaWrapperX<T> inIfPresent(SFunction<S, ?> column, Object... values) { | |
| 39 | 37 | if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { |
| 40 | 38 | return (MPJLambdaWrapperX<T>) super.in(column, values); |
| 41 | 39 | } |
| 42 | 40 | return this; |
| 43 | 41 | } |
| 44 | 42 | |
| 45 | - public <R> MPJLambdaWrapperX<T> eqIfPresent(SFunction<R, ?> column, Object val) { | |
| 43 | + public <S> MPJLambdaWrapperX<T> eqIfPresent(SFunction<S, ?> column, Object val) { | |
| 46 | 44 | if (ObjectUtil.isNotEmpty(val)) { |
| 47 | 45 | return (MPJLambdaWrapperX<T>) super.eq(column, val); |
| 48 | 46 | } |
| 49 | 47 | return this; |
| 50 | 48 | } |
| 51 | 49 | |
| 52 | - public <R> MPJLambdaWrapperX<T> neIfPresent(SFunction<R, ?> column, Object val) { | |
| 50 | + public <S> MPJLambdaWrapperX<T> neIfPresent(SFunction<S, ?> column, Object val) { | |
| 53 | 51 | if (ObjectUtil.isNotEmpty(val)) { |
| 54 | 52 | return (MPJLambdaWrapperX<T>) super.ne(column, val); |
| 55 | 53 | } |
| 56 | 54 | return this; |
| 57 | 55 | } |
| 58 | 56 | |
| 59 | - public <R> MPJLambdaWrapperX<T> gtIfPresent(SFunction<R, ?> column, Object val) { | |
| 57 | + public <S> MPJLambdaWrapperX<T> gtIfPresent(SFunction<S, ?> column, Object val) { | |
| 60 | 58 | if (val != null) { |
| 61 | 59 | return (MPJLambdaWrapperX<T>) super.gt(column, val); |
| 62 | 60 | } |
| 63 | 61 | return this; |
| 64 | 62 | } |
| 65 | 63 | |
| 66 | - public <R> MPJLambdaWrapperX<T> geIfPresent(SFunction<R, ?> column, Object val) { | |
| 64 | + public <S> MPJLambdaWrapperX<T> geIfPresent(SFunction<S, ?> column, Object val) { | |
| 67 | 65 | if (val != null) { |
| 68 | 66 | return (MPJLambdaWrapperX<T>) super.ge(column, val); |
| 69 | 67 | } |
| 70 | 68 | return this; |
| 71 | 69 | } |
| 72 | 70 | |
| 73 | - public <R> MPJLambdaWrapperX<T> ltIfPresent(SFunction<R, ?> column, Object val) { | |
| 71 | + public <S> MPJLambdaWrapperX<T> ltIfPresent(SFunction<S, ?> column, Object val) { | |
| 74 | 72 | if (val != null) { |
| 75 | 73 | return (MPJLambdaWrapperX<T>) super.lt(column, val); |
| 76 | 74 | } |
| 77 | 75 | return this; |
| 78 | 76 | } |
| 79 | 77 | |
| 80 | - public <R> MPJLambdaWrapperX<T> leIfPresent(SFunction<R, ?> column, Object val) { | |
| 78 | + public <S> MPJLambdaWrapperX<T> leIfPresent(SFunction<S, ?> column, Object val) { | |
| 81 | 79 | if (val != null) { |
| 82 | 80 | return (MPJLambdaWrapperX<T>) super.le(column, val); |
| 83 | 81 | } |
| 84 | 82 | return this; |
| 85 | 83 | } |
| 86 | 84 | |
| 87 | - public <R> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<R, ?> column, Object val1, Object val2) { | |
| 85 | + public <S> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<S, ?> column, Object[] values) { | |
| 86 | + Object val1 = ArrayUtils.get(values, 0); | |
| 87 | + Object val2 = ArrayUtils.get(values, 1); | |
| 88 | + return betweenIfPresent(column, val1, val2); | |
| 89 | + } | |
| 90 | + | |
| 91 | + public <S> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<S, ?> column, Object val1, Object val2) { | |
| 88 | 92 | if (val1 != null && val2 != null) { |
| 89 | 93 | return (MPJLambdaWrapperX<T>) super.between(column, val1, val2); |
| 90 | 94 | } |
| 91 | 95 | if (val1 != null) { |
| 92 | - return (MPJLambdaWrapperX<T>) ge(column, val1); | |
| 96 | + return (MPJLambdaWrapperX<T>) super.ge(column, val1); | |
| 93 | 97 | } |
| 94 | 98 | if (val2 != null) { |
| 95 | - return (MPJLambdaWrapperX<T>) le(column, val2); | |
| 99 | + return (MPJLambdaWrapperX<T>) super.le(column, val2); | |
| 96 | 100 | } |
| 97 | 101 | return this; |
| 98 | 102 | } |
| 99 | 103 | |
| 100 | - public <R> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<R, ?> column, Object[] values) { | |
| 101 | - Object val1 = ArrayUtils.get(values, 0); | |
| 102 | - Object val2 = ArrayUtils.get(values, 1); | |
| 103 | - return betweenIfPresent(column, val1, val2); | |
| 104 | - } | |
| 105 | 104 | |
| 106 | 105 | // ========== 重写父类方法,方便链式调用 ========== |
| 107 | 106 | |
| ... | ... | @@ -310,4 +309,41 @@ public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> { |
| 310 | 309 | return this; |
| 311 | 310 | } |
| 312 | 311 | |
| 313 | -} | |
| 314 | 312 | \ No newline at end of file |
| 313 | + // ========== 关键重写:使 leftJoin 返回当前类型 this ========== | |
| 314 | + @Override | |
| 315 | + public <A, B> MPJLambdaWrapperX<T> leftJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right) { | |
| 316 | + super.leftJoin(clazz, left, right); | |
| 317 | + return this; | |
| 318 | + } | |
| 319 | + | |
| 320 | + @Override | |
| 321 | + public <A, B> MPJLambdaWrapperX<T> rightJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right) { | |
| 322 | + super.rightJoin(clazz, left, right); | |
| 323 | + return this; | |
| 324 | + } | |
| 325 | + | |
| 326 | + @Override | |
| 327 | + public <A, B> MPJLambdaWrapperX<T> innerJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right) { | |
| 328 | + super.innerJoin(clazz, left, right); | |
| 329 | + return this; | |
| 330 | + } | |
| 331 | + | |
| 332 | + // ========== 添加扩展 Join 支持 ext 函数式参数 ========== | |
| 333 | + public <A, B> MPJLambdaWrapperX<T> leftJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right, Consumer<MPJLambdaWrapperX<T>> ext) { | |
| 334 | + super.leftJoin(clazz, left, right); | |
| 335 | + if (ext != null) ext.accept(this); | |
| 336 | + return this; | |
| 337 | + } | |
| 338 | + | |
| 339 | + public <A, B> MPJLambdaWrapperX<T> rightJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right, Consumer<MPJLambdaWrapperX<T>> ext) { | |
| 340 | + super.rightJoin(clazz, left, right); | |
| 341 | + if (ext != null) ext.accept(this); | |
| 342 | + return this; | |
| 343 | + } | |
| 344 | + | |
| 345 | + public <A, B> MPJLambdaWrapperX<T> innerJoin(Class<A> clazz, SFunction<A, ?> left, SFunction<B, ?> right, Consumer<MPJLambdaWrapperX<T>> ext) { | |
| 346 | + super.innerJoin(clazz, left, right); | |
| 347 | + if (ext != null) ext.accept(this); | |
| 348 | + return this; | |
| 349 | + } | |
| 350 | +} | ... | ... |