Commit 69da106b9ee6540a32c6a09f773a1405aecf4080

Authored by YunaiV
1 parent 1cf079fe

reactor:增强MPJLambdaWrapperX 类,左连接后可以使用betweenIfPresent等

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,7 +4,6 @@ import cn.hutool.core.util.ArrayUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; 5 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
6 import com.baomidou.mybatisplus.core.toolkit.support.SFunction; 6 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
7 -import com.github.yulichang.toolkit.MPJWrappers;  
8 import com.github.yulichang.wrapper.MPJLambdaWrapper; 7 import com.github.yulichang.wrapper.MPJLambdaWrapper;
9 import org.springframework.util.StringUtils; 8 import org.springframework.util.StringUtils;
10 9
@@ -15,93 +14,93 @@ import java.util.function.Consumer; @@ -15,93 +14,93 @@ import java.util.function.Consumer;
15 * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能: 14 * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能:
16 * <p> 15 * <p>
17 * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 16 * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。
18 - * 17 + * 2. SFunction<S, ?> column + <S> 泛型:支持任意类字段(主表、子表、三表),推荐写法, 让编译器自动推断 S 类型
19 * @param <T> 数据类型 18 * @param <T> 数据类型
20 */ 19 */
21 public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> { 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 if (StringUtils.hasText(val)) { 23 if (StringUtils.hasText(val)) {
26 return (MPJLambdaWrapperX<T>) super.like(column, val); 24 return (MPJLambdaWrapperX<T>) super.like(column, val);
27 } 25 }
28 return this; 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 if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { 30 if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {
33 return (MPJLambdaWrapperX<T>) super.in(column, values); 31 return (MPJLambdaWrapperX<T>) super.in(column, values);
34 } 32 }
35 return this; 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 if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { 37 if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {
40 return (MPJLambdaWrapperX<T>) super.in(column, values); 38 return (MPJLambdaWrapperX<T>) super.in(column, values);
41 } 39 }
42 return this; 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 if (ObjectUtil.isNotEmpty(val)) { 44 if (ObjectUtil.isNotEmpty(val)) {
47 return (MPJLambdaWrapperX<T>) super.eq(column, val); 45 return (MPJLambdaWrapperX<T>) super.eq(column, val);
48 } 46 }
49 return this; 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 if (ObjectUtil.isNotEmpty(val)) { 51 if (ObjectUtil.isNotEmpty(val)) {
54 return (MPJLambdaWrapperX<T>) super.ne(column, val); 52 return (MPJLambdaWrapperX<T>) super.ne(column, val);
55 } 53 }
56 return this; 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 if (val != null) { 58 if (val != null) {
61 return (MPJLambdaWrapperX<T>) super.gt(column, val); 59 return (MPJLambdaWrapperX<T>) super.gt(column, val);
62 } 60 }
63 return this; 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 if (val != null) { 65 if (val != null) {
68 return (MPJLambdaWrapperX<T>) super.ge(column, val); 66 return (MPJLambdaWrapperX<T>) super.ge(column, val);
69 } 67 }
70 return this; 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 if (val != null) { 72 if (val != null) {
75 return (MPJLambdaWrapperX<T>) super.lt(column, val); 73 return (MPJLambdaWrapperX<T>) super.lt(column, val);
76 } 74 }
77 return this; 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 if (val != null) { 79 if (val != null) {
82 return (MPJLambdaWrapperX<T>) super.le(column, val); 80 return (MPJLambdaWrapperX<T>) super.le(column, val);
83 } 81 }
84 return this; 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 if (val1 != null && val2 != null) { 92 if (val1 != null && val2 != null) {
89 return (MPJLambdaWrapperX<T>) super.between(column, val1, val2); 93 return (MPJLambdaWrapperX<T>) super.between(column, val1, val2);
90 } 94 }
91 if (val1 != null) { 95 if (val1 != null) {
92 - return (MPJLambdaWrapperX<T>) ge(column, val1); 96 + return (MPJLambdaWrapperX<T>) super.ge(column, val1);
93 } 97 }
94 if (val2 != null) { 98 if (val2 != null) {
95 - return (MPJLambdaWrapperX<T>) le(column, val2); 99 + return (MPJLambdaWrapperX<T>) super.le(column, val2);
96 } 100 }
97 return this; 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&lt;T&gt; extends MPJLambdaWrapper&lt;T&gt; { @@ -310,4 +309,41 @@ public class MPJLambdaWrapperX&lt;T&gt; extends MPJLambdaWrapper&lt;T&gt; {
310 return this; 309 return this;
311 } 310 }
312 311
313 -}  
314 \ No newline at end of file 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 +}