params, boolean null2IsNull);
+
+ /**
+ * ignore
+ */
+ default Children eq(R column, Object val) {
+ return eq(true, column, val);
+ }
+
+ /**
+ * 等于 =
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children eq(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children ne(R column, Object val) {
+ return ne(true, column, val);
+ }
+
+ /**
+ * 不等于 <>
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children ne(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children gt(R column, Object val) {
+ return gt(true, column, val);
+ }
+
+ /**
+ * 大于 >
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children gt(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children ge(R column, Object val) {
+ return ge(true, column, val);
+ }
+
+ /**
+ * 大于等于 >=
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children ge(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children lt(R column, Object val) {
+ return lt(true, column, val);
+ }
+
+ /**
+ * 小于 <
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children lt(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children le(R column, Object val) {
+ return le(true, column, val);
+ }
+
+ /**
+ * 小于等于 <=
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children le(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children between(R column, Object val1, Object val2) {
+ return between(true, column, val1, val2);
+ }
+
+ /**
+ * BETWEEN 值1 AND 值2
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val1 值1
+ * @param val2 值2
+ * @return children
+ */
+ Children between(boolean condition, R column, Object val1, Object val2);
+
+ /**
+ * ignore
+ */
+ default Children notBetween(R column, Object val1, Object val2) {
+ return notBetween(true, column, val1, val2);
+ }
+
+ /**
+ * NOT BETWEEN 值1 AND 值2
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val1 值1
+ * @param val2 值2
+ * @return children
+ */
+ Children notBetween(boolean condition, R column, Object val1, Object val2);
+
+ /**
+ * ignore
+ */
+ default Children like(R column, Object val) {
+ return like(true, column, val);
+ }
+
+ /**
+ * LIKE '%值%'
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children like(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children notLike(R column, Object val) {
+ return notLike(true, column, val);
+ }
+
+ /**
+ * NOT LIKE '%值%'
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children notLike(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children likeLeft(R column, Object val) {
+ return likeLeft(true, column, val);
+ }
+
+ /**
+ * LIKE '%值'
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children likeLeft(boolean condition, R column, Object val);
+
+ /**
+ * ignore
+ */
+ default Children likeRight(R column, Object val) {
+ return likeRight(true, column, val);
+ }
+
+ /**
+ * LIKE '值%'
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children likeRight(boolean condition, R column, Object val);
+}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java
index abbecba..a167f2b 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java
@@ -12,7 +12,7 @@ import java.util.function.Consumer;
*
* copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func}
*/
-@SuppressWarnings({"unchecked", "unused"})
+@SuppressWarnings({"unchecked", "unused", "JavadocDeclaration"})
public interface Func extends Serializable {
/**
@@ -168,6 +168,83 @@ public interface Func extends Serializable {
*/
Children notInSql(boolean condition, SFunction column, String inValue);
+
+ /**
+ * 字段 > ( sql语句 )
+ * 例1: gtSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: gtSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children gtSql(boolean condition, SFunction column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children gtSql(SFunction column, String inValue) {
+ return gtSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 >= ( sql语句 )
+ * 例1: geSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: geSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children geSql(boolean condition, SFunction column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children geSql(SFunction column, String inValue) {
+ return geSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 < ( sql语句 )
+ * 例1: ltSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: ltSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children ltSql(boolean condition, SFunction column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children ltSql(SFunction column, String inValue) {
+ return ltSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 <= ( sql语句 )
+ * 例1: leSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: leSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children leSql(boolean condition, SFunction column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children leSql(SFunction column, String inValue) {
+ return leSql(true, column, inValue);
+ }
+
/**
* ignore
*/
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/FuncStr.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/FuncStr.java
new file mode 100644
index 0000000..570636a
--- /dev/null
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/FuncStr.java
@@ -0,0 +1,408 @@
+/*
+ * Copyright (c) 2011-2022, baomidou (jobob@qq.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.github.yulichang.wrapper.interfaces;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func}
+ *
+ * @since 1.3.12
+ */
+@SuppressWarnings("ALL")
+public interface FuncStr extends Serializable {
+
+ /**
+ * ignore
+ */
+ default Children isNull(R column) {
+ return isNull(true, column);
+ }
+
+ /**
+ * 字段 IS NULL
+ * 例: isNull("name")
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @return children
+ */
+ Children isNull(boolean condition, R column);
+
+ /**
+ * ignore
+ */
+ default Children isNotNull(R column) {
+ return isNotNull(true, column);
+ }
+
+ /**
+ * 字段 IS NOT NULL
+ * 例: isNotNull("name")
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @return children
+ */
+ Children isNotNull(boolean condition, R column);
+
+ /**
+ * ignore
+ */
+ default Children in(R column, Collection> coll) {
+ return in(true, column, coll);
+ }
+
+ /**
+ * 字段 IN (value.get(0), value.get(1), ...)
+ * 例: in("id", Arrays.asList(1, 2, 3, 4, 5))
+ *
+ * 注意!集合为空若存在逻辑错误,请在 condition 条件中判断
+ * 如果集合为 empty 则不会进行 sql 拼接
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param coll 数据集合
+ * @return children
+ */
+ Children in(boolean condition, R column, Collection> coll);
+
+ /**
+ * ignore
+ */
+ default Children in(R column, Object... values) {
+ return in(true, column, values);
+ }
+
+ /**
+ * 字段 IN (v0, v1, ...)
+ * 例: in("id", 1, 2, 3, 4, 5)
+ *
+ * 注意!数组为空若存在逻辑错误,请在 condition 条件中判断
+ * 如果动态数组为 empty 则不会进行 sql 拼接
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param values 数据数组
+ * @return children
+ */
+ Children in(boolean condition, R column, Object... values);
+
+ /**
+ * ignore
+ */
+ default Children notIn(R column, Collection> coll) {
+ return notIn(true, column, coll);
+ }
+
+ /**
+ * 字段 NOT IN (value.get(0), value.get(1), ...)
+ * 例: notIn("id", Arrays.asList(1, 2, 3, 4, 5))
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param coll 数据集合
+ * @return children
+ */
+ Children notIn(boolean condition, R column, Collection> coll);
+
+ /**
+ * ignore
+ */
+ default Children notIn(R column, Object... value) {
+ return notIn(true, column, value);
+ }
+
+ /**
+ * 字段 NOT IN (v0, v1, ...)
+ * 例: notIn("id", 1, 2, 3, 4, 5)
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param values 数据数组
+ * @return children
+ */
+ Children notIn(boolean condition, R column, Object... values);
+
+ /**
+ * ignore
+ */
+ default Children inSql(R column, String inValue) {
+ return inSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 IN ( sql语句 )
+ * !! sql 注入方式的 in 方法 !!
+ * 例1: inSql("id", "1, 2, 3, 4, 5, 6")
+ * 例2: inSql("id", "select id from table where id < 3")
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param inValue sql语句
+ * @return children
+ */
+ Children inSql(boolean condition, R column, String inValue);
+
+ /**
+ * 字段 > ( sql语句 )
+ * 例1: gtSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: gtSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children gtSql(boolean condition, R column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children gtSql(R column, String inValue) {
+ return gtSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 >= ( sql语句 )
+ * 例1: geSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: geSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children geSql(boolean condition, R column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children geSql(R column, String inValue) {
+ return geSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 < ( sql语句 )
+ * 例1: ltSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: ltSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children ltSql(boolean condition, R column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children ltSql(R column, String inValue) {
+ return ltSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 <= ( sql语句 )
+ * 例1: leSql("id", "1, 2, 3, 4, 5, 6")
+ * 例1: leSql("id", "select id from table where name = 'JunJun'")
+ *
+ * @param condition
+ * @param column
+ * @param inValue
+ * @return
+ */
+ Children leSql(boolean condition, R column, String inValue);
+
+ /**
+ * ignore
+ */
+ default Children leSql(R column, String inValue) {
+ return leSql(true, column, inValue);
+ }
+
+ /**
+ * ignore
+ */
+ default Children notInSql(R column, String inValue) {
+ return notInSql(true, column, inValue);
+ }
+
+ /**
+ * 字段 NOT IN ( sql语句 )
+ * !! sql 注入方式的 not in 方法 !!
+ * 例1: notInSql("id", "1, 2, 3, 4, 5, 6")
+ * 例2: notInSql("id", "select id from table where id < 3")
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param inValue sql语句 ---> 1,2,3,4,5,6 或者 select id from table where id < 3
+ * @return children
+ */
+ Children notInSql(boolean condition, R column, String inValue);
+
+ /**
+ * 分组:GROUP BY 字段, ...
+ * 例: groupBy("id")
+ *
+ * @param condition 执行条件
+ * @param column 单个字段
+ * @return children
+ */
+ Children groupBy(boolean condition, R column);
+
+ default Children groupBy(R column) {
+ return groupBy(true, column);
+ }
+
+ /**
+ * 分组:GROUP BY 字段, ...
+ * 例: groupBy(Arrays.asList("id", "name"))
+ *
+ * @param condition 执行条件
+ * @param columns 字段数组
+ * @return children
+ */
+ Children groupByStr(boolean condition, List columns);
+
+ default Children groupByStr(List columns) {
+ return groupByStr(true, columns);
+ }
+
+ default Children groupBy(R column, R... columns) {
+ return groupBy(true, column, columns);
+ }
+
+ /**
+ * 分组:GROUP BY 字段, ...
+ */
+ Children groupBy(boolean condition, R column, R... columns);
+
+ /**
+ * 排序:ORDER BY 字段, ... ASC
+ * 例: orderByAsc(true, "id")
+ *
+ * @param condition 执行条件
+ * @param column 单个字段
+ * @return children
+ */
+ default Children orderByAsc(boolean condition, R column) {
+ return orderBy(condition, true, column);
+ }
+
+ default Children orderByAsc(R column) {
+ return orderByAsc(true, column);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ... ASC
+ * 例: orderByAsc(true, Arrays.asList("id", "name"))
+ *
+ * @param condition 执行条件
+ * @param columns 字段数组
+ * @return children
+ */
+ default Children orderByAscStr(boolean condition, List columns) {
+ return orderByStr(condition, true, columns);
+ }
+
+ default Children orderByAscStr(List columns) {
+ return orderByAscStr(true, columns);
+ }
+
+ default Children orderByAsc(R column, R... columns) {
+ return orderByAsc(true, column, columns);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ... ASC
+ */
+ default Children orderByAsc(boolean condition, R column, R... columns) {
+ return orderBy(condition, true, column, columns);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ... DESC
+ * 例: orderByDesc(true, "id")
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @return children
+ */
+ default Children orderByDesc(boolean condition, R column) {
+ return orderBy(condition, false, column);
+ }
+
+ default Children orderByDesc(R column) {
+ return orderByDesc(true, column);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ... DESC
+ * 例: orderByDesc(true, Arrays.asList("id", "name"))
+ *
+ * @param condition 执行条件
+ * @param columns 字段列表
+ * @return children
+ */
+ default Children orderByDescStr(boolean condition, List columns) {
+ return orderByStr(condition, false, columns);
+ }
+
+ default Children orderByDescStr(List columns) {
+ return orderByDescStr(true, columns);
+ }
+
+ default Children orderByDesc(R column, R... columns) {
+ return orderByDesc(true, column, columns);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ... DESC
+ */
+ default Children orderByDesc(boolean condition, R column, R... columns) {
+ return orderBy(condition, false, column, columns);
+ }
+
+ /**
+ * 排序:ORDER BY 字段, ...
+ * 例: orderBy(true, "id")
+ *
+ * @param condition 执行条件
+ * @param isAsc 是否是 ASC 排序
+ * @param column 单个字段
+ * @return children
+ */
+ Children orderBy(boolean condition, boolean isAsc, R column);
+
+ /**
+ * 排序:ORDER BY 字段, ...
+ * 例: orderBy(true, Arrays.asList("id", "name"))
+ *
+ * @param condition 执行条件
+ * @param isAsc 是否是 ASC 排序
+ * @param columns 字段列表
+ * @return children
+ */
+ Children orderByStr(boolean condition, boolean isAsc, List columns);
+
+ /**
+ * 排序:ORDER BY 字段, ...
+ */
+ Children orderBy(boolean condition, boolean isAsc, R column, R... columns);
+
+}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/on/OnCompare.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/OnCompare.java
similarity index 98%
rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/on/OnCompare.java
rename to mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/OnCompare.java
index 0113cb7..0906cea 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/on/OnCompare.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/OnCompare.java
@@ -1,4 +1,4 @@
-package com.github.yulichang.wrapper.interfaces.on;
+package com.github.yulichang.wrapper.interfaces;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java
index 5c82594..e4178aa 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Query.java
@@ -3,6 +3,7 @@ package com.github.yulichang.wrapper.interfaces;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.github.yulichang.toolkit.LambdaUtils;
import com.github.yulichang.toolkit.MPJReflectionKit;
@@ -13,8 +14,10 @@ import com.github.yulichang.wrapper.segments.*;
import java.io.Serializable;
import java.lang.reflect.Field;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -47,6 +50,7 @@ public interface Query extends Serializable {
*/
default Children select(Class entityClass, Predicate predicate) {
TableInfo info = TableInfoHelper.getTableInfo(entityClass);
+ Assert.notNull(info, "table not find by class <%s>", entityClass.getSimpleName());
Map cacheMap = ColumnCache.getMapField(entityClass);
info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach(
i -> getSelectColum().add(new SelectNormal(cacheMap.get(i.getProperty()), getIndex())));
@@ -57,6 +61,16 @@ public interface Query extends Serializable {
@SuppressWarnings("unchecked")
Children select(SFunction... columns);
+ /**
+ * String 查询
+ *
+ * @param columns 列
+ */
+ default Children select(String... columns) {
+ getSelectColum().addAll(Arrays.stream(columns).map(SelectString::new).collect(Collectors.toList()));
+ return getChildren();
+ }
+
/**
* 说明:
* 比如我们需要查询用户表有10个字段,然而我们只需要3个就够了,用mybatis-plus提供的select
@@ -148,6 +162,16 @@ public interface Query extends Serializable {
}
+ default Children selectFunc(String sql, Function[]> column, String alias) {
+ getSelectColum().add(new SelectFunc(alias, getIndex(), () -> sql, column.apply(new SelectFunc.Func())));
+ return getChildren();
+ }
+
+ default Children selectFunc(String sql, Function[]> column, SFunction alias) {
+ getSelectColum().add(new SelectFunc(LambdaUtils.getName(alias), getIndex(), () -> sql, column.apply(new SelectFunc.Func())));
+ return getChildren();
+ }
+
/* 默认聚合函数扩展 */
/**
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java
index b3760de..d933773 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java
@@ -2,15 +2,18 @@ package com.github.yulichang.wrapper.interfaces;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.github.yulichang.interfaces.MPJBaseJoin;
+import com.github.yulichang.query.interfaces.StringJoin;
import com.github.yulichang.toolkit.Constant;
-import com.github.yulichang.toolkit.LambdaUtils;
-import com.github.yulichang.wrapper.interfaces.on.WrapperFunction;
+import com.github.yulichang.wrapper.MPJAbstractLambdaWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+
+import java.util.function.BiConsumer;
/**
* @author yulichang
*/
@SuppressWarnings("unused")
-public interface QueryJoin extends MPJBaseJoin {
+public interface QueryJoin extends MPJBaseJoin, StringJoin {
/**
* left join
@@ -20,17 +23,7 @@ public interface QueryJoin extends MPJBaseJoin {
* @param right 条件
*/
default Children leftJoin(Class clazz, SFunction left, SFunction right) {
- return leftJoin(clazz, on -> on.eq(left, right));
- }
-
- /**
- * left join
- *
- * @param left 条件
- * @param right 条件
- */
- default Children leftJoin(SFunction left, SFunction right) {
- return leftJoin(LambdaUtils.getEntityClass(left), on -> on.eq(left, right));
+ return join(Constant.LEFT_JOIN, clazz, left, right);
}
/**
@@ -39,10 +32,10 @@ public interface QueryJoin extends MPJBaseJoin {
* 例 leftJoin(UserDO.class, on -> on.eq(UserDO::getId,UserAddressDO::getUserId).le().gt()...)
*
* @param clazz 关联实体类
- * @param function 条件
+ * @param function 条件`
*/
- default Children leftJoin(Class clazz, WrapperFunction function) {
- return join(Constant.LEFT_JOIN, clazz, function, null);
+ default Children leftJoin(Class clazz, WrapperFunction> function) {
+ return join(Constant.LEFT_JOIN, clazz, function);
}
/**
@@ -52,18 +45,31 @@ public interface QueryJoin extends MPJBaseJoin {
* @param left 条件
* @param right 条件
*/
- default Children leftJoin(Class clazz, SFunction left, SFunction right, WrapperFunction ext) {
- return leftJoin(clazz, on -> on.eq(left, right), ext);
+ default Children leftJoin(Class clazz, SFunction left, SFunction right, WrapperFunction> ext) {
+ return join(Constant.LEFT_JOIN, clazz, left, right, ext);
+ }
+
+ /**
+ * left join 多条件
+ *
+ * 例 leftJoin(UserDO.class, on -> on.eq(UserDO::getId,UserAddressDO::getUserId).le().gt()...)
+ *
+ * @param clazz 关联实体类
+ * @param consumer 条件
+ */
+ default Children leftJoin(Class clazz, BiConsumer, MPJLambdaWrapper> consumer) {
+ return join(Constant.LEFT_JOIN, clazz, consumer);
}
/**
* left join
*
+ * @param clazz 关联的实体类
* @param left 条件
* @param right 条件
*/
- default Children leftJoin(SFunction left, SFunction right, WrapperFunction ext) {
- return leftJoin(LambdaUtils.getEntityClass(left), on -> on.eq(left, right), ext);
+ default Children leftJoin(Class clazz, String alias, SFunction left, SFunction right) {
+ return join(Constant.LEFT_JOIN, clazz,alias, left, right);
}
/**
@@ -74,147 +80,294 @@ public interface QueryJoin