mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
升级MP依赖3.5.3.2 & 同步新版功能及代码
This commit is contained in:
parent
a8b91edb6b
commit
9340e5e38f
@ -46,7 +46,7 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-extension</artifactId>
|
||||
<version>3.5.3.1</version>
|
||||
<version>3.5.3.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -58,7 +58,7 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.5.3.1</version>
|
||||
<version>3.5.3.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -67,13 +67,13 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-extension</artifactId>
|
||||
<version>3.5.3.1</version>
|
||||
<version>3.5.3.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.24</version>
|
||||
<version>1.18.28</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -85,7 +85,7 @@
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||
<version>1.8.21</version>
|
||||
<version>1.9.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.github.yulichang.kt;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
||||
import com.baomidou.mybatisplus.core.toolkit.*;
|
||||
import com.github.yulichang.config.ConfigProperties;
|
||||
@ -11,6 +12,7 @@ import com.github.yulichang.toolkit.KtUtils;
|
||||
import com.github.yulichang.toolkit.KtWrapperUtils;
|
||||
import com.github.yulichang.toolkit.TableList;
|
||||
import com.github.yulichang.toolkit.support.ColumnCache;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.github.yulichang.wrapper.interfaces.Chain;
|
||||
import com.github.yulichang.wrapper.interfaces.SelectWrapper;
|
||||
import com.github.yulichang.wrapper.resultmap.Label;
|
||||
@ -58,6 +60,17 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
*/
|
||||
private SharedString unionSql;
|
||||
|
||||
/**
|
||||
* 自定义wrapper索引
|
||||
*/
|
||||
private AtomicInteger wrapperIndex;
|
||||
|
||||
/**
|
||||
* 自定义wrapper
|
||||
*/
|
||||
@Getter
|
||||
private Map<String, Wrapper<?>> wrapperMap;
|
||||
|
||||
|
||||
/**
|
||||
* 推荐使用 带 class 的构造方法
|
||||
@ -192,6 +205,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
/**
|
||||
* 子查询
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public KtLambdaWrapper<T> selectSub(Class<?> clazz, String st, Consumer<KtLambdaWrapper<?>> consumer, KProperty<?> alias) {
|
||||
KtLambdaWrapper<?> wrapper = new KtLambdaWrapper(null, clazz, SharedString.emptyString(), paramNameSeq, paramNameValuePairs,
|
||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
||||
@ -203,6 +217,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
wrapper.alias = st;
|
||||
wrapper.subTableAlias = st;
|
||||
consumer.accept(wrapper);
|
||||
addCustomWrapper(wrapper);
|
||||
String sql = KtWrapperUtils.buildSubSqlByWrapper(clazz, wrapper, alias.getName());
|
||||
this.selectColumns.add(new SelectString(sql, hasAlias, this.alias));
|
||||
return typedThis;
|
||||
@ -215,6 +230,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
public final KtLambdaWrapper<T> union(KtLambdaWrapper<?>... wrappers) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (KtLambdaWrapper<?> wrapper : wrappers) {
|
||||
addCustomWrapper(wrapper);
|
||||
Class<?> entityClass = wrapper.getEntityClass();
|
||||
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
||||
sb.append(" UNION ")
|
||||
@ -234,6 +250,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
public final <E, F> KtLambdaWrapper<T> unionAll(KtLambdaWrapper<T>... wrappers) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (KtLambdaWrapper<?> wrapper : wrappers) {
|
||||
addCustomWrapper(wrapper);
|
||||
Class<?> entityClass = wrapper.getEntityClass();
|
||||
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
||||
sb.append(" UNION ALL ")
|
||||
@ -246,6 +263,20 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
private void addCustomWrapper(KtLambdaWrapper<?> wrapper) {
|
||||
if (Objects.isNull(wrapperIndex)) {
|
||||
wrapperIndex = new AtomicInteger(0);
|
||||
}
|
||||
int index = wrapperIndex.incrementAndGet();
|
||||
if (Objects.isNull(wrapperMap)) {
|
||||
wrapperMap = new HashMap<>();
|
||||
}
|
||||
String key = "ew" + index;
|
||||
wrapper.setParamAlias(wrapper.getParamAlias() + ".wrapperMap." + key);
|
||||
wrapperMap.put(key, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询条件 SQL 片段
|
||||
*/
|
||||
@ -329,6 +360,8 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
||||
selectDistinct = false;
|
||||
sqlSelect.toNull();
|
||||
selectColumns.clear();
|
||||
wrapperIndex = new AtomicInteger(0);
|
||||
wrapperMap.clear();
|
||||
resultMapMybatisLabel.clear();
|
||||
}
|
||||
}
|
||||
|
@ -106,6 +106,16 @@ public class MPJLambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, MPJLambda
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MPJLambdaQueryWrapper<T> select(boolean condition, List<SFunction<T, ?>> columns) {
|
||||
if (condition && CollectionUtils.isNotEmpty(columns)) {
|
||||
for (SFunction<T, ?> s : columns) {
|
||||
selectColumns.add(columnToString(s, false));
|
||||
}
|
||||
}
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略查询字段
|
||||
* <p>
|
||||
|
@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.Query;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
||||
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.*;
|
||||
import com.github.yulichang.config.ConfigProperties;
|
||||
import com.github.yulichang.query.interfaces.StringJoin;
|
||||
import com.github.yulichang.toolkit.Asserts;
|
||||
import com.github.yulichang.toolkit.MPJSqlInjectionUtils;
|
||||
import com.github.yulichang.toolkit.TableHelper;
|
||||
import com.github.yulichang.wrapper.interfaces.Chain;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
@ -48,6 +51,7 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
/**
|
||||
* 主表别名
|
||||
*/
|
||||
@Getter
|
||||
private String alias = ConfigProperties.tableAlias;
|
||||
|
||||
/**
|
||||
@ -74,6 +78,11 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
*/
|
||||
private Function<String, String> tableNameFunc;
|
||||
|
||||
/**
|
||||
* 检查 SQL 注入过滤
|
||||
*/
|
||||
private boolean checkSqlInjection = false;
|
||||
|
||||
|
||||
public MPJQueryWrapper() {
|
||||
super.initNeed();
|
||||
@ -114,6 +123,22 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
this.selectDistinct = selectDistinct;
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启检查 SQL 注入
|
||||
*/
|
||||
public MPJQueryWrapper<T> checkSqlInjection() {
|
||||
this.checkSqlInjection = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String columnToString(String column) {
|
||||
if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) {
|
||||
throw new MybatisPlusException("Discovering SQL injection column: " + column);
|
||||
}
|
||||
return column;
|
||||
}
|
||||
|
||||
/**
|
||||
* sql去重
|
||||
* select distinct
|
||||
@ -131,6 +156,14 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MPJQueryWrapper<T> select(boolean condition, List<String> columns) {
|
||||
if (condition && CollectionUtils.isNotEmpty(columns)) {
|
||||
selectColumns.addAll(columns);
|
||||
}
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略查询字段
|
||||
* <p>
|
||||
@ -208,10 +241,6 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
return from.getStringValue();
|
||||
}
|
||||
|
||||
public String getAlias() {
|
||||
return alias;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置主表别名
|
||||
* 如果要用,请最先调用,
|
||||
|
@ -69,7 +69,7 @@ public class DeleteJoinWrapper<T> extends MPJAbstractLambdaWrapper<T, DeleteJoin
|
||||
* 获取删除的表
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("UnusedReturnValue")
|
||||
@SuppressWarnings({"UnusedReturnValue", "DuplicatedCode"})
|
||||
public String getDeleteSql() {
|
||||
if (StringUtils.isNotBlank(this.deleteSql.getStringValue())) {
|
||||
return this.deleteSql.getStringValue();
|
||||
|
@ -36,13 +36,14 @@ import static java.util.stream.Collectors.joining;
|
||||
*
|
||||
* @author yulichang
|
||||
*/
|
||||
@SuppressWarnings({"DuplicatedCode", "unused"})
|
||||
@SuppressWarnings({"DuplicatedCode", "unused", "LombokGetterMayBeUsed"})
|
||||
public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLambdaWrapper<T, Children>>
|
||||
extends MPJAbstractWrapper<T, Children> implements QueryJoin<Children, T> {
|
||||
|
||||
/**
|
||||
* 主表别名
|
||||
*/
|
||||
@Getter
|
||||
protected String alias = ConfigProperties.tableAlias;
|
||||
/**
|
||||
* 副表别名
|
||||
@ -365,10 +366,6 @@ public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLa
|
||||
return from.getStringValue();
|
||||
}
|
||||
|
||||
public String getAlias() {
|
||||
return alias;
|
||||
}
|
||||
|
||||
/**
|
||||
* 内部调用, 不建议使用
|
||||
*/
|
||||
@ -462,6 +459,7 @@ public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLa
|
||||
this.hasAlias = false;
|
||||
this.keyWord = null;
|
||||
this.logicSql = true;
|
||||
this.checkSqlInjection = false;
|
||||
this.onWrappers.clear();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.github.yulichang.wrapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
||||
import com.baomidou.mybatisplus.core.toolkit.*;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
@ -57,6 +58,17 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
*/
|
||||
private SharedString unionSql;
|
||||
|
||||
/**
|
||||
* 自定义wrapper索引
|
||||
*/
|
||||
private AtomicInteger wrapperIndex;
|
||||
|
||||
/**
|
||||
* 自定义wrapper
|
||||
*/
|
||||
@Getter
|
||||
private Map<String, Wrapper<?>> wrapperMap;
|
||||
|
||||
/**
|
||||
* 推荐使用 带 class 的构造方法
|
||||
*/
|
||||
@ -192,6 +204,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
/**
|
||||
* 子查询
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public <E, F> MPJLambdaWrapper<T> selectSub(Class<E> clazz, String st, Consumer<MPJLambdaWrapper<E>> consumer, SFunction<F, ?> alias) {
|
||||
MPJLambdaWrapper<E> wrapper = new MPJLambdaWrapper<E>(null, clazz, SharedString.emptyString(), paramNameSeq, paramNameValuePairs,
|
||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
||||
@ -203,6 +216,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
wrapper.alias = st;
|
||||
wrapper.subTableAlias = st;
|
||||
consumer.accept(wrapper);
|
||||
addCustomWrapper(wrapper);
|
||||
String sql = WrapperUtils.buildSubSqlByWrapper(clazz, wrapper, LambdaUtils.getName(alias));
|
||||
this.selectColumns.add(new SelectString(sql, hasAlias, this.alias));
|
||||
return typedThis;
|
||||
@ -215,6 +229,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
public final MPJLambdaWrapper<T> union(MPJLambdaWrapper<?>... wrappers) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (MPJLambdaWrapper<?> wrapper : wrappers) {
|
||||
addCustomWrapper(wrapper);
|
||||
Class<?> entityClass = wrapper.getEntityClass();
|
||||
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
||||
sb.append(" UNION ")
|
||||
@ -234,6 +249,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
public final <E, F> MPJLambdaWrapper<T> unionAll(MPJLambdaWrapper<T>... wrappers) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (MPJLambdaWrapper<?> wrapper : wrappers) {
|
||||
addCustomWrapper(wrapper);
|
||||
Class<?> entityClass = wrapper.getEntityClass();
|
||||
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
||||
sb.append(" UNION ALL ")
|
||||
@ -246,6 +262,20 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
private void addCustomWrapper(MPJLambdaWrapper<?> wrapper) {
|
||||
if (Objects.isNull(wrapperIndex)) {
|
||||
wrapperIndex = new AtomicInteger(0);
|
||||
}
|
||||
int index = wrapperIndex.incrementAndGet();
|
||||
if (Objects.isNull(wrapperMap)) {
|
||||
wrapperMap = new HashMap<>();
|
||||
}
|
||||
String key = "ew" + index;
|
||||
wrapper.setParamAlias(wrapper.getParamAlias() + ".wrapperMap." + key);
|
||||
wrapperMap.put(key, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询条件 SQL 片段
|
||||
*/
|
||||
@ -329,6 +359,8 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
selectDistinct = false;
|
||||
sqlSelect.toNull();
|
||||
selectColumns.clear();
|
||||
wrapperIndex = new AtomicInteger(0);
|
||||
wrapperMap.clear();
|
||||
resultMapMybatisLabel.clear();
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
package com.github.yulichang.wrapper.interfaces;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.github.yulichang.wrapper.segments.Select;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author yulichang
|
||||
@ -21,4 +23,6 @@ public interface SelectWrapper<Entity, Children> {
|
||||
boolean isResultMap();
|
||||
|
||||
List<?> getResultMapMybatisLabel();
|
||||
|
||||
Map<String, Wrapper<?>> getWrapperMap();
|
||||
}
|
||||
|
@ -51,7 +51,7 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-extension</artifactId>
|
||||
<version>3.5.3.1</version>
|
||||
<version>3.5.3.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -1057,21 +1057,38 @@ class LambdaWrapperTest {
|
||||
wrapper1.list();
|
||||
}
|
||||
|
||||
/**
|
||||
* select 子查询
|
||||
*/
|
||||
@Test
|
||||
void checkOrderBy() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
|
||||
.selectAll(UserDO.class)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
|
||||
.le(UserDO::getId, 100)
|
||||
.checkSqlInjection()
|
||||
.orderByDesc("t.id");
|
||||
wrapper.list();
|
||||
}
|
||||
|
||||
/**
|
||||
* select 子查询
|
||||
*/
|
||||
@Test
|
||||
void union() {
|
||||
ThreadLocalUtils.set();
|
||||
MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
|
||||
.selectAll(UserDO.class);
|
||||
.selectAll(UserDO.class)
|
||||
.eq(UserDO::getId, 1);
|
||||
MPJLambdaWrapper<UserDO> wrapper1 = JoinWrappers.lambda(UserDO.class)
|
||||
.selectAll(UserDO.class);
|
||||
.selectAll(UserDO.class)
|
||||
.eq(UserDO::getName, "张三 2");
|
||||
MPJLambdaWrapper<UserDO> wrapper2 = JoinWrappers.lambda(UserDO.class)
|
||||
.selectAll(UserDO.class);
|
||||
|
||||
.selectAll(UserDO.class)
|
||||
.eq(UserDO::getPid, 2);
|
||||
wrapper.union(wrapper1, wrapper2);
|
||||
wrapper.list();
|
||||
System.out.println(1);
|
||||
List<UserDO> list = wrapper.list();
|
||||
|
||||
assert list.size() == 7;
|
||||
}
|
||||
}
|
||||
|
@ -1128,16 +1128,18 @@ class LambdaWrapperTest {
|
||||
*/
|
||||
@Test
|
||||
fun union() {
|
||||
ThreadLocalUtils.set("SELECT t.id,t.pid,t.`name`,t.`json`,t.sex,t.head_img,t.create_time,t.address_id,t.address_id2,t.del,t.create_by,t.update_by FROM `user` t WHERE t.del=false UNION SELECT t.id,t.pid,t.`name`,t.`json`,t.sex,t.head_img,t.create_time,t.address_id,t.address_id2,t.del,t.create_by,t.update_by FROM `user` t WHERE t.del=false UNION SELECT t.id,t.pid,t.`name`,t.`json`,t.sex,t.head_img,t.create_time,t.address_id,t.address_id2,t.del,t.create_by,t.update_by FROM `user` t WHERE t.del=false")
|
||||
val wrapper: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
||||
.selectAll(UserDO::class.java)
|
||||
.eq(UserDO::id, 1)
|
||||
val wrapper1: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
||||
.selectAll(UserDO::class.java)
|
||||
.eq(UserDO::name, "张三 2")
|
||||
val wrapper2: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
||||
.selectAll(UserDO::class.java)
|
||||
.eq(UserDO::pid, 2)
|
||||
|
||||
wrapper.union(wrapper1, wrapper2)
|
||||
wrapper.list()
|
||||
println(1)
|
||||
val list = wrapper.list()
|
||||
assert(list.size == 7)
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.5.3.1</version>
|
||||
<version>3.5.3.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
Loading…
x
Reference in New Issue
Block a user