From b4ce33141d7f7950f6e21fbea8c2c6246f5667e3 Mon Sep 17 00:00:00 2001
From: yulichang <570810310@qq.com>
Date: Sat, 26 Oct 2024 21:08:37 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=90=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitee/ISSUE_TEMPLATE.zh-CN.md | 15 --
.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 15 --
.../annotation/DynamicTableName.java | 3 +
.../extension/kt/segments/FuncArgs.java | 2 +-
.../yulichang/method/MPJBaseMethod.java | 6 +-
.../query/MPJLambdaQueryWrapper.java | 6 +-
.../yulichang/query/MPJQueryWrapper.java | 6 +-
.../yulichang/toolkit/WrapperUtils.java | 33 +--
.../wrapper/JoinAbstractLambdaWrapper.java | 24 +-
.../wrapper/JoinAbstractWrapper.java | 114 +++++++-
.../yulichang/wrapper/MPJLambdaWrapper.java | 40 +--
.../yulichang/wrapper/interfaces/Compare.java | 3 +-
.../wrapper/interfaces/CompareWrapper.java | 151 +++++++++++
.../yulichang/wrapper/interfaces/Func.java | 4 +-
.../wrapper/interfaces/FuncWrapper.java | 86 ++++++
.../wrapper/interfaces/QueryJoin.java | 78 ------
.../yulichang/wrapper/segments/Fun.java | 18 +-
.../wrapper/segments/SelectFunc.java | 17 +-
mybatis-plus-join-test/pom.xml | 4 +-
mybatis-plus-join-test/test-join/pom.xml | 1 -
.../yulichang/test/join/entity/UserDO.java | 2 -
.../test/join/unit/ConditionSubTest.java | 247 ++++++++++++++++++
.../yulichang/test/join/unit/FromTest.java | 46 ++++
.../test/join/unit/SelectFuncTest.java | 41 +++
.../test/join/unit/SelectSubTest.java | 28 +-
.../yulichang/test/join/unit/UnionTest.java | 10 +-
.../github/yulichang/test/kt/entity/UserDO.kt | 2 -
pom.xml | 2 +-
28 files changed, 778 insertions(+), 226 deletions(-)
delete mode 100644 .gitee/ISSUE_TEMPLATE.zh-CN.md
delete mode 100644 .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
create mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareWrapper.java
create mode 100644 mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/FuncWrapper.java
create mode 100644 mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/ConditionSubTest.java
create mode 100644 mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/FromTest.java
diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md
deleted file mode 100644
index 59a9fc0..0000000
--- a/.gitee/ISSUE_TEMPLATE.zh-CN.md
+++ /dev/null
@@ -1,15 +0,0 @@
-### 当前使用版本(必填,否则不予处理)
-
-
-
-### 该问题是如何引起的?(确定最新版也有问题再提!!!)
-
-
-
-### 重现步骤(如果有就写完整)
-
-
-
-### 报错信息
-
-
diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
deleted file mode 100644
index 061a184..0000000
--- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
+++ /dev/null
@@ -1,15 +0,0 @@
-### 该Pull Request关联的Issue
-
-
-
-### 修改描述
-
-
-
-### 测试用例
-
-
-
-### 修复效果的截屏
-
-
diff --git a/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/DynamicTableName.java b/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/DynamicTableName.java
index daf8fc6..30d8ef1 100644
--- a/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/DynamicTableName.java
+++ b/mybatis-plus-join-annotation/src/main/java/com/github/yulichang/annotation/DynamicTableName.java
@@ -4,10 +4,13 @@ import java.lang.annotation.*;
/**
* 动态表名注解
+ *
+ * 1.5.2及以后无需添加此注解就可实现动态表名
*
* @author yulichang
* @since 1.4.4
*/
+@Deprecated
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/kt/segments/FuncArgs.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/kt/segments/FuncArgs.java
index a1b5db4..72fdcf9 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/kt/segments/FuncArgs.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/extension/kt/segments/FuncArgs.java
@@ -33,7 +33,7 @@ public class FuncArgs {
public SelectFunc.Arg[] getFuncArg() {
return Arrays.stream(args).map(i ->
- new SelectFunc.Arg(KtUtils.ref(i), i.getName(), false, null, i))
+ new SelectFunc.Arg(KtUtils.ref(i), i.getName(), false, null, i,false,null))
.toArray(SelectFunc.Arg[]::new);
}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
index c8f60e8..1cf149c 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
@@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
import com.github.yulichang.adapter.AdapterHelper;
import com.github.yulichang.adapter.base.metadata.OrderFieldInfo;
-import com.github.yulichang.annotation.DynamicTableName;
import com.github.yulichang.config.ConfigProperties;
import java.io.UnsupportedEncodingException;
@@ -123,6 +122,7 @@ public interface MPJBaseMethod extends Constants {
tableFieldInfo.getWhereStrategy());
}
+ @SuppressWarnings({"DuplicatedCode", "deprecation"})
default String convertIf(TableFieldInfo tableFieldInfo, final String sqlScript, final String property, final FieldStrategy fieldStrategy) {
if (fieldStrategy == FieldStrategy.NEVER) {
return null;
@@ -183,10 +183,6 @@ public interface MPJBaseMethod extends Constants {
* 获取表名
*/
default String mpjTableName(TableInfo tableInfo) {
- DynamicTableName dynamicTableName = tableInfo.getEntityType().getAnnotation(DynamicTableName.class);
- if (Objects.isNull(dynamicTableName)) {
- return tableInfo.getTableName();
- }
String tableName = tableInfo.getTableName(), encode;
try {
encode = URLEncoder.encode(tableName, "UTF-8");
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java
index dde0ee7..593da16 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java
@@ -302,11 +302,9 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper
- *
- * @see com.github.yulichang.annotation.DynamicTableName
+ * 如果主表需要动态表名
+ *
*/
public MPJLambdaQueryWrapper setTableName(Function func) {
this.tableNameFunc = func;
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
index 80c1af5..5ec189f 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
@@ -314,11 +314,9 @@ public class MPJQueryWrapper extends AbstractWrapper
- *
- * @see com.github.yulichang.annotation.DynamicTableName
+ * 如果主表需要动态表名
+ *
*/
public MPJQueryWrapper setTableName(Function func) {
this.tableNameFunc = func;
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java
index 8fd1356..7167b85 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java
@@ -20,36 +20,7 @@ import java.util.Optional;
public class WrapperUtils {
public static String buildSubSqlByWrapper(Class clazz, MPJLambdaWrapper wrapper, String alias) {
- TableInfo tableInfo = TableHelper.getAssert(clazz);
- String first = Optional.ofNullable(wrapper.getSqlFirst()).orElse(StringPool.EMPTY);
- boolean hasWhere = false;
- String entityWhere = getEntitySql(tableInfo, wrapper);
- if (StringUtils.isNotBlank(entityWhere)) {
- hasWhere = true;
- }
- String mainLogic = mainLogic(hasWhere, clazz, wrapper);
- if (StringUtils.isNotBlank(mainLogic)) {
- hasWhere = true;
- }
- String subLogic = subLogic(hasWhere, wrapper);
- if (StringUtils.isNotBlank(subLogic)) {
- hasWhere = true;
- }
- String sqlSegment = (wrapper.getSqlSegment() != null && StringUtils.isNotBlank(wrapper.getSqlSegment())) ?
- ((wrapper.isEmptyOfNormal() ? StringPool.EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : StringPool.EMPTY;
-
- String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(StringPool.EMPTY);
- return String.format(" (%s SELECT %s FROM %s %s %s %s %s %s %s) AS %s ",
- first,
- wrapper.getSqlSelect(),
- wrapper.getTableName(tableInfo.getTableName()),
- wrapper.getAlias(),
- wrapper.getFrom(),
- mainLogic,
- subLogic,
- sqlSegment,
- sqlComment,
- alias);
+ return String.format("%s AS %s", buildUnionSqlByWrapper(clazz, wrapper), alias);
}
public static String buildUnionSqlByWrapper(Class> clazz, MPJLambdaWrapper> wrapper) {
@@ -72,7 +43,7 @@ public class WrapperUtils {
((wrapper.isEmptyOfNormal() ? StringPool.EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : StringPool.EMPTY;
String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(StringPool.EMPTY);
- return String.format(" %s SELECT %s FROM %s %s %s %s %s %s %s ",
+ return String.format("( %s SELECT %s FROM %s %s %s %s %s %s %s )",
first,
wrapper.getSqlSelect(),
wrapper.getTableName(tableInfo.getTableName()),
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java
index ce85caa..918d220 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java
@@ -43,15 +43,6 @@ import static java.util.stream.Collectors.joining;
public abstract class JoinAbstractLambdaWrapper>
extends JoinAbstractWrapper implements QueryJoin {
- /**
- * 主表别名
- */
- @Getter
- protected String alias = ConfigProperties.tableAlias;
- /**
- * 副表别名
- */
- protected String subTableAlias = ConfigProperties.tableAlias;
/**
* 是否存在对一或对多
*/
@@ -229,6 +220,9 @@ public abstract class JoinAbstractLambdaWrapper entityClass = getEntityClass();
if (entityClass != null) {
TableInfo tableInfo = TableHelper.get(entityClass);
@@ -433,6 +430,13 @@ public abstract class JoinAbstractLambdaWrapper> fromWrapper) {
+ Assert.notNull(getEntityClass(), "main table is null please use JoinWrapper.lambda(Class) or new MPJLambdaWrapper(Class)");
+ MPJLambdaWrapper wrapper = fromWrapper.apply(fromInstance(getEntityClass()));
+ this.tableName = WrapperUtils.buildUnionSqlByWrapper(getEntityClass(), wrapper);
+ return typedThis;
+ }
+
/**
* 内部调用, 不建议使用
*/
@@ -452,7 +456,7 @@ public abstract class JoinAbstractLambdaWrapper, Nested, Join, Func, OnCompare,
CompareStrIfExists, FuncStr {
+ /**
+ * 主表别名
+ */
+ @Getter
+ protected String alias = ConfigProperties.tableAlias;
+ /**
+ * 副表别名
+ */
+ protected String subTableAlias = ConfigProperties.tableAlias;
/**
* 占位符
*/
@@ -155,6 +162,37 @@ public abstract class JoinAbstractWrapper MPJLambdaWrapper subInstance(Class clazz, String st) {
+ MPJLambdaWrapper wrapper = new MPJLambdaWrapper(null, clazz, SharedString.emptyString(),
+ paramNameSeq, paramNameValuePairs, new MergeSegments(), new SharedString(this.paramAlias
+ .getStringValue()), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
+ new TableList(), null, null, null, null, ifExists) {
+ };
+ wrapper.tableList.setAlias(st);
+ wrapper.tableList.setRootClass(clazz);
+ wrapper.tableList.setParent(this.tableList);
+ wrapper.alias = st;
+ wrapper.subTableAlias = st;
+ return wrapper;
+ }
+
+ protected MPJLambdaWrapper fromInstance(Class clazz) {
+ MPJLambdaWrapper wrapper = new MPJLambdaWrapper(null, clazz, SharedString.emptyString(),
+ paramNameSeq, paramNameValuePairs, new MergeSegments(), new SharedString(this.paramAlias
+ .getStringValue()), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
+ new TableList(), null, null, null, null, ifExists) {
+ };
+ wrapper.tableList.setAlias(this.alias);
+ wrapper.tableList.setRootClass(clazz);
+ wrapper.alias = this.alias;
+ return wrapper;
+ }
+
+
+ protected MPJLambdaWrapper subInstance(Class clazz) {
+ return subInstance(clazz, ConfigProperties.subQueryAlias);
+ }
+
/**
* 转为子类,方便自定义继承扩展
*/
@@ -234,31 +272,61 @@ public abstract class JoinAbstractWrapper Children eq(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, EQ, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children ne(boolean condition, String alias, SFunction column, Object val) {
return addCondition(condition, alias, column, NE, val);
}
+ @Override
+ public Children ne(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, NE, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children gt(boolean condition, String alias, SFunction column, Object val) {
return addCondition(condition, alias, column, GT, val);
}
+ @Override
+ public Children gt(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, GT, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children ge(boolean condition, String alias, SFunction column, Object val) {
return addCondition(condition, alias, column, GE, val);
}
+ @Override
+ public Children ge(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, GE, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children lt(boolean condition, String alias, SFunction column, Object val) {
return addCondition(condition, alias, column, LT, val);
}
+ @Override
+ public Children lt(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, LT, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children le(boolean condition, String alias, SFunction column, Object val) {
return addCondition(condition, alias, column, LE, val);
}
+ @Override
+ public Children le(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return addCondition(condition, alias, column, LE, clazz, wrapper.apply(subInstance(clazz)));
+ }
+
@Override
public Children like(boolean condition, String alias, SFunction column, Object val) {
return likeValue(condition, LIKE, alias, column, val, SqlLike.DEFAULT);
@@ -389,26 +457,55 @@ public abstract class JoinAbstractWrapper String.format("(%s)", formatSqlMaybeWithParam(existsSql, null, values))));
}
+ @Override
+ public Children exists(boolean condition, Class clazz, MFunction> wrapper) {
+ return maybeDo(condition, () -> appendSqlSegments(EXISTS,
+ () -> WrapperUtils.buildUnionSqlByWrapper(clazz, wrapper.apply(subInstance(clazz)))));
+ }
+
@Override
public Children notExists(boolean condition, String existsSql, Object... values) {
return not(condition).exists(condition, existsSql, values);
}
+ @Override
+ public Children notExists(boolean condition, Class clazz, MFunction> wrapper) {
+ return not(condition).exists(condition, clazz, wrapper);
+ }
+
@Override
public Children isNull(boolean condition, String alias, SFunction column) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IS_NULL));
}
+ @Override
+ public Children isNull(boolean condition, String alias, Class clazz, MFunction> wrapper) {
+ return maybeDo(condition, () -> appendSqlSegments(() ->
+ WrapperUtils.buildUnionSqlByWrapper(clazz, wrapper.apply(fromInstance(clazz))), IS_NULL));
+ }
+
@Override
public Children isNotNull(boolean condition, String alias, SFunction column) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IS_NOT_NULL));
}
+ @Override
+ public Children isNotNull(boolean condition, String alias, Class clazz, MFunction> wrapper) {
+ return maybeDo(condition, () -> appendSqlSegments(() ->
+ WrapperUtils.buildUnionSqlByWrapper(clazz, wrapper.apply(fromInstance(clazz))), IS_NOT_NULL));
+ }
+
@Override
public Children in(boolean condition, String alias, SFunction column, Collection> coll) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, inExpression(coll)));
}
+ @Override
+ public Children in(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, () ->
+ WrapperUtils.buildUnionSqlByWrapper(clazz, wrapper.apply(fromInstance(clazz)))));
+ }
+
@Override
public Children in(boolean condition, String alias, SFunction column, Object... values) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, inExpression(values)));
@@ -419,6 +516,12 @@ public abstract class JoinAbstractWrapper appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, inExpression(coll)));
}
+ @Override
+ public Children notIn(boolean condition, String alias, SFunction column, Class clazz, MFunction> wrapper) {
+ return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, () ->
+ WrapperUtils.buildUnionSqlByWrapper(clazz, wrapper.apply(fromInstance(clazz)))));
+ }
+
@Override
public Children notIn(boolean condition, String alias, SFunction column, Object... values) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, inExpression(values)));
@@ -682,6 +785,11 @@ public abstract class JoinAbstractWrapper formatParam(null, val)));
}
+ protected Children addCondition(boolean condition, String alias, SFunction column, SqlKeyword sqlKeyword, Class clazz, MPJLambdaWrapper val) {
+ return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), sqlKeyword,
+ () -> WrapperUtils.buildUnionSqlByWrapper(clazz, val)));
+ }
+
protected Children addCondition(boolean condition, String alias, SFunction column,
SqlKeyword sqlKeyword, String rightAlias, SFunction val) {
Class c = LambdaUtils.getEntityClass(column);
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
index e061063..a71002b 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
@@ -253,16 +253,7 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper selectSub(Class clazz, String st, Consumer> consumer, String alias) {
- MPJLambdaWrapper wrapper = new MPJLambdaWrapper(null, clazz, SharedString.emptyString(),
- paramNameSeq, paramNameValuePairs, new MergeSegments(), new SharedString(this.paramAlias
- .getStringValue()), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
- new TableList(), null, null, null, null, ifExists) {
- };
- wrapper.tableList.setAlias(st);
- wrapper.tableList.setRootClass(clazz);
- wrapper.tableList.setParent(this.tableList);
- wrapper.alias = st;
- wrapper.subTableAlias = st;
+ MPJLambdaWrapper wrapper = subInstance(clazz, st);
consumer.accept(wrapper);
this.selectColumns.add(new SelectSub(() -> WrapperUtils.buildSubSqlByWrapper(clazz, wrapper, alias), hasAlias, this.alias, alias));
return typedThis;
@@ -277,13 +268,7 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper union(Class clazz, Consumer> consumer) {
- MPJLambdaWrapper unionWrapper = new MPJLambdaWrapper(null, clazz, SharedString.emptyString(),
- paramNameSeq, paramNameValuePairs, new MergeSegments(), new SharedString(this.paramAlias
- .getStringValue()), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
- new TableList(), null, null, null, null, ifExists) {
- };
- unionWrapper.tableList.setAlias(ConfigProperties.tableAlias);
- unionWrapper.tableList.setRootClass(clazz);
+ MPJLambdaWrapper unionWrapper = fromInstance(clazz);
consumer.accept(unionWrapper);
String sb = " UNION " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper);
@@ -320,13 +305,7 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper unionAll(Class clazz, Consumer> consumer) {
- MPJLambdaWrapper unionWrapper = new MPJLambdaWrapper(null, clazz, SharedString.emptyString(),
- paramNameSeq, paramNameValuePairs, new MergeSegments(), new SharedString(this.paramAlias
- .getStringValue()), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
- new TableList(), null, null, null, null, ifExists) {
- };
- unionWrapper.tableList.setAlias(ConfigProperties.tableAlias);
- unionWrapper.tableList.setRootClass(clazz);
+ MPJLambdaWrapper unionWrapper = fromInstance(clazz);
consumer.accept(unionWrapper);
String sb = " UNION ALL " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper);
@@ -361,10 +340,15 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper {
- String pf = arg.isHasTableAlias() ? arg.getTableAlias() : tableList.getPrefixByClass(arg.getClazz());
- Map mapField = ColumnCache.getMapField(arg.getClazz());
- SelectCache cache = mapField.get(arg.getProp());
- return pf + StringPool.DOT + cache.getColumn();
+ if (arg.isSub()) {
+ Object o = arg.getSubFunc().apply(subInstance(arg.getClazz()));
+ return WrapperUtils.buildUnionSqlByWrapper(arg.getClazz(), (MPJLambdaWrapper>) o);
+ } else {
+ String pf = arg.isHasTableAlias() ? arg.getTableAlias() : tableList.getPrefixByClass(arg.getClazz());
+ Map mapField = ColumnCache.getMapField(arg.getClazz());
+ SelectCache cache = mapField.get(arg.getProp());
+ return pf + StringPool.DOT + cache.getColumn();
+ }
}).toArray()) + Constant.AS + i.getAlias();
}
} else {
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Compare.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Compare.java
index a9bd165..bf7e12f 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Compare.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Compare.java
@@ -2,7 +2,6 @@ package com.github.yulichang.wrapper.interfaces;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
-import java.io.Serializable;
import java.util.Map;
import java.util.function.BiPredicate;
@@ -12,7 +11,7 @@ import java.util.function.BiPredicate;
* {@link com.baomidou.mybatisplus.core.conditions.interfaces.Compare}
*/
@SuppressWarnings("unused")
-public interface Compare extends Serializable {
+public interface Compare extends CompareWrapper {
default Children allEq(Map, V> params) {
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareWrapper.java
new file mode 100644
index 0000000..7a1c1ba
--- /dev/null
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/CompareWrapper.java
@@ -0,0 +1,151 @@
+package com.github.yulichang.wrapper.interfaces;
+
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+
+import java.io.Serializable;
+
+/**
+ * 将原来的泛型R改成SFunction
+ *
+ * {@link com.baomidou.mybatisplus.core.conditions.interfaces.Compare}
+ */
+@SuppressWarnings("unused")
+public interface CompareWrapper extends Serializable {
+
+ default Children eq(SFunction column, Class clazz, MFunction> val) {
+ return eq(true, null, column, clazz, val);
+ }
+
+ default Children eq(String alias, SFunction column, Class clazz, MFunction> val) {
+ return eq(true, alias, column, clazz, val);
+ }
+
+ default Children eq(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return eq(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 等于 =
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children eq(boolean condition, String alias, SFunction column, Class clazz, MFunction> val);
+
+ default Children ne(SFunction column, Class clazz, MFunction> val) {
+ return ne(true, null, column, clazz, val);
+ }
+
+ default Children ne(String alias, SFunction column, Class clazz, MFunction> val) {
+ return ne(true, alias, column, clazz, val);
+ }
+
+ default Children ne(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return ne(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 不等于 <>
+ *
+ * @param condition 执行条件
+ * @param alias 字段别名
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children ne(boolean condition, String alias, SFunction column, Class clazz, MFunction> val);
+
+
+ default Children gt(SFunction column, Class clazz, MFunction> val) {
+ return gt(true, null, column, clazz, val);
+ }
+
+ default Children gt(String alias, SFunction column, Class clazz, MFunction> val) {
+ return gt(true, alias, column, clazz, val);
+ }
+
+ default Children gt(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return gt(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 大于 >
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children gt(boolean condition, String alias, SFunction column, Class clazz, MFunction> val);
+
+ default Children ge(SFunction column, Class clazz, MFunction> val) {
+ return ge(true, null, column, clazz, val);
+ }
+
+ default Children ge(String alias, SFunction column, Class clazz, MFunction> val) {
+ return ge(true, alias, column, clazz, val);
+ }
+
+ default Children ge(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return ge(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 大于等于 >=
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children ge(boolean condition, String alias, SFunction column, Class clazz, MFunction> val);
+
+
+ default Children lt(SFunction column, Class clazz, MFunction> val) {
+ return lt(true, null, column, clazz, val);
+ }
+
+ default Children lt(String alias, SFunction column, Class clazz, MFunction> val) {
+ return lt(true, alias, column, clazz, val);
+ }
+
+ default Children lt(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return lt(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 小于 <
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children lt(boolean condition, String alias, SFunction column, Class clazz, MFunction> val);
+
+
+ default Children le(SFunction column, Class clazz, MFunction> val) {
+ return le(true, null, column, clazz, val);
+ }
+
+ default Children le(String alias, SFunction column, Class clazz, MFunction> val) {
+ return le(true, alias, column, clazz, val);
+ }
+
+ default Children le(boolean condition, SFunction column, Class clazz, MFunction> val) {
+ return le(condition, null, column, clazz, val);
+ }
+
+ /**
+ * 小于等于 <=
+ *
+ * @param condition 执行条件
+ * @param column 字段
+ * @param val 值
+ * @return children
+ */
+ Children le(boolean condition, String alias, SFunction column, Class clazz, MFunction> 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 3409b27..a1f945f 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
@@ -2,7 +2,6 @@ package com.github.yulichang.wrapper.interfaces;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
-import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
@@ -13,7 +12,7 @@ import java.util.function.Consumer;
* copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func}
*/
@SuppressWarnings({"unchecked", "unused"})
-public interface Func extends Serializable {
+public interface Func extends FuncWrapper {
default Children isNull(SFunction