mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
fix union条件嵌套参数名问题
https://github.com/yulichang/mybatis-plus-join/issues/87 https://gitee.com/best_handsome/mybatis-plus-join/issues/I8C2QR
This commit is contained in:
parent
91c67c5e82
commit
bb93df99b4
@ -64,7 +64,7 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
|
|||||||
* 其他
|
* 其他
|
||||||
*/
|
*/
|
||||||
/* mybatis plus 3.4.3新增 这个时wrapper的别名 不是MPJ的别名 */
|
/* mybatis plus 3.4.3新增 这个时wrapper的别名 不是MPJ的别名 */
|
||||||
protected SharedString paramAlias;
|
protected SharedString paramAlias = new SharedString(null);
|
||||||
protected SharedString lastSql;
|
protected SharedString lastSql;
|
||||||
/**
|
/**
|
||||||
* SQL注释
|
* SQL注释
|
||||||
@ -607,9 +607,10 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
|
|||||||
paramNameSeq.set(0);
|
paramNameSeq.set(0);
|
||||||
paramNameValuePairs.clear();
|
paramNameValuePairs.clear();
|
||||||
expression.clear();
|
expression.clear();
|
||||||
lastSql.toEmpty();
|
paramAlias.toNull();
|
||||||
sqlComment.toEmpty();
|
if (Objects.nonNull(lastSql)) lastSql.toEmpty();
|
||||||
sqlFirst.toEmpty();
|
if (Objects.nonNull(sqlComment)) sqlComment.toEmpty();
|
||||||
|
if (Objects.nonNull(sqlFirst)) sqlFirst.toEmpty();
|
||||||
tableList.clear();
|
tableList.clear();
|
||||||
entityClass = null;
|
entityClass = null;
|
||||||
onWrappers.clear();
|
onWrappers.clear();
|
||||||
@ -658,7 +659,7 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getParamAlias() {
|
public String getParamAlias() {
|
||||||
return paramAlias == null ? Constants.WRAPPER : paramAlias.getStringValue();
|
return paramAlias.getStringValue() == null ? Constants.WRAPPER : paramAlias.getStringValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -669,9 +670,8 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
|
|||||||
*/
|
*/
|
||||||
public Children setParamAlias(String paramAlias) {
|
public Children setParamAlias(String paramAlias) {
|
||||||
Assert.notEmpty(paramAlias, "paramAlias can not be empty!");
|
Assert.notEmpty(paramAlias, "paramAlias can not be empty!");
|
||||||
Assert.isTrue(CollectionUtils.isEmpty(paramNameValuePairs), "Please call this method before working!");
|
Assert.isNull(this.paramAlias.getStringValue(), "Please do not call the method repeatedly!");
|
||||||
Assert.isNull(this.paramAlias, "Please do not call the method repeatedly!");
|
this.paramAlias.setStringValue(paramAlias);
|
||||||
this.paramAlias = new SharedString(paramAlias);
|
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
|||||||
* 不建议直接 new 该实例,使用 JoinWrappers.lambda(UserDO.class)
|
* 不建议直接 new 该实例,使用 JoinWrappers.lambda(UserDO.class)
|
||||||
*/
|
*/
|
||||||
KtLambdaWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
|
KtLambdaWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
|
||||||
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
|
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
|
||||||
SharedString lastSql, SharedString sqlComment, SharedString sqlFirst,
|
SharedString lastSql, SharedString sqlComment, SharedString sqlFirst,
|
||||||
TableList tableList, Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
TableList tableList, Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
||||||
super.setEntity(entity);
|
super.setEntity(entity);
|
||||||
@ -134,6 +134,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
|||||||
this.paramNameValuePairs = paramNameValuePairs;
|
this.paramNameValuePairs = paramNameValuePairs;
|
||||||
this.expression = mergeSegments;
|
this.expression = mergeSegments;
|
||||||
this.sqlSelect = sqlSelect;
|
this.sqlSelect = sqlSelect;
|
||||||
|
this.paramAlias = paramAlias;
|
||||||
this.lastSql = lastSql;
|
this.lastSql = lastSql;
|
||||||
this.sqlComment = sqlComment;
|
this.sqlComment = sqlComment;
|
||||||
this.sqlFirst = sqlFirst;
|
this.sqlFirst = sqlFirst;
|
||||||
@ -207,7 +208,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public KtLambdaWrapper<T> selectSub(Class<?> clazz, String st, Consumer<KtLambdaWrapper<?>> consumer, KProperty<?> alias) {
|
public KtLambdaWrapper<T> selectSub(Class<?> clazz, String st, Consumer<KtLambdaWrapper<?>> consumer, KProperty<?> alias) {
|
||||||
KtLambdaWrapper<?> wrapper = new KtLambdaWrapper(null, clazz, SharedString.emptyString(), paramNameSeq, paramNameValuePairs,
|
KtLambdaWrapper<?> wrapper = new KtLambdaWrapper(null, clazz, SharedString.emptyString(), paramNameSeq, paramNameValuePairs,
|
||||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
new MergeSegments(), SharedString.emptyString(), this.paramAlias, SharedString.emptyString(), SharedString.emptyString(),
|
||||||
new TableList(), null, null, null, null) {
|
new TableList(), null, null, null, null) {
|
||||||
};
|
};
|
||||||
wrapper.tableList.setAlias(st);
|
wrapper.tableList.setAlias(st);
|
||||||
@ -348,7 +349,7 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
|||||||
@Override
|
@Override
|
||||||
protected KtLambdaWrapper<T> instance(Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
protected KtLambdaWrapper<T> instance(Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
||||||
return new KtLambdaWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
|
return new KtLambdaWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
|
||||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
new MergeSegments(), SharedString.emptyString(), this.paramAlias, SharedString.emptyString(), SharedString.emptyString(),
|
||||||
this.tableList, index, keyWord, joinClass, tableName);
|
this.tableList, index, keyWord, joinClass, tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,7 +357,8 @@ public class KtLambdaWrapper<T> extends KtAbstractLambdaWrapper<T, KtLambdaWrapp
|
|||||||
public void clear() {
|
public void clear() {
|
||||||
super.clear();
|
super.clear();
|
||||||
selectDistinct = false;
|
selectDistinct = false;
|
||||||
sqlSelect.toNull();
|
sqlSelect.toEmpty();
|
||||||
|
if (Objects.nonNull(unionSql)) unionSql.toEmpty();
|
||||||
selectColumns.clear();
|
selectColumns.clear();
|
||||||
wrapperIndex = new AtomicInteger(0);
|
wrapperIndex = new AtomicInteger(0);
|
||||||
wrapperMap.clear();
|
wrapperMap.clear();
|
||||||
|
@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@ -36,7 +37,7 @@ import static java.util.stream.Collectors.joining;
|
|||||||
*
|
*
|
||||||
* @author yulichang
|
* @author yulichang
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"DuplicatedCode", "unused", "LombokGetterMayBeUsed"})
|
@SuppressWarnings({"DuplicatedCode", "unused"})
|
||||||
public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLambdaWrapper<T, Children>>
|
public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLambdaWrapper<T, Children>>
|
||||||
extends MPJAbstractWrapper<T, Children> implements QueryJoin<Children, T> {
|
extends MPJAbstractWrapper<T, Children> implements QueryJoin<Children, T> {
|
||||||
|
|
||||||
@ -455,7 +456,7 @@ public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLa
|
|||||||
this.dynamicTableName = false;
|
this.dynamicTableName = false;
|
||||||
this.tableFunc = null;
|
this.tableFunc = null;
|
||||||
this.logicDelType = ConfigProperties.logicDelType;
|
this.logicDelType = ConfigProperties.logicDelType;
|
||||||
this.from.toNull();
|
this.from.toEmpty();
|
||||||
this.hasAlias = false;
|
this.hasAlias = false;
|
||||||
this.keyWord = null;
|
this.keyWord = null;
|
||||||
this.logicSql = true;
|
this.logicSql = true;
|
||||||
|
@ -59,7 +59,7 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
|
|||||||
* 其他
|
* 其他
|
||||||
*/
|
*/
|
||||||
/* mybatis plus 3.4.3新增 这个时wrapper的别名 不是MPJ的别名 */
|
/* mybatis plus 3.4.3新增 这个时wrapper的别名 不是MPJ的别名 */
|
||||||
protected SharedString paramAlias;
|
protected SharedString paramAlias = new SharedString(null);
|
||||||
protected SharedString lastSql;
|
protected SharedString lastSql;
|
||||||
/**
|
/**
|
||||||
* SQL注释
|
* SQL注释
|
||||||
@ -617,12 +617,13 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
|
|||||||
@Override
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
entity = null;
|
entity = null;
|
||||||
|
paramAlias.toNull();
|
||||||
paramNameSeq.set(0);
|
paramNameSeq.set(0);
|
||||||
paramNameValuePairs.clear();
|
paramNameValuePairs.clear();
|
||||||
expression.clear();
|
expression.clear();
|
||||||
lastSql.toEmpty();
|
if (Objects.nonNull(lastSql)) lastSql.toEmpty();
|
||||||
sqlComment.toEmpty();
|
if (Objects.nonNull(sqlComment)) sqlComment.toEmpty();
|
||||||
sqlFirst.toEmpty();
|
if (Objects.nonNull(sqlFirst)) sqlFirst.toEmpty();
|
||||||
tableList.clear();
|
tableList.clear();
|
||||||
entityClass = null;
|
entityClass = null;
|
||||||
onWrappers.clear();
|
onWrappers.clear();
|
||||||
@ -671,7 +672,7 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getParamAlias() {
|
public String getParamAlias() {
|
||||||
return paramAlias == null ? Constants.WRAPPER : paramAlias.getStringValue();
|
return paramAlias.getStringValue() == null ? Constants.WRAPPER : paramAlias.getStringValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -682,9 +683,8 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
|
|||||||
*/
|
*/
|
||||||
public Children setParamAlias(String paramAlias) {
|
public Children setParamAlias(String paramAlias) {
|
||||||
Assert.notEmpty(paramAlias, "paramAlias can not be empty!");
|
Assert.notEmpty(paramAlias, "paramAlias can not be empty!");
|
||||||
Assert.isTrue(CollectionUtils.isEmpty(paramNameValuePairs), "Please call this method before working!");
|
Assert.isTrue(StringUtils.isBlank(this.paramAlias.getStringValue()), "Please do not call the method repeatedly!");
|
||||||
Assert.isNull(this.paramAlias, "Please do not call the method repeatedly!");
|
this.paramAlias.setStringValue(paramAlias);
|
||||||
this.paramAlias = new SharedString(paramAlias);
|
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
|||||||
* 不建议直接 new 该实例,使用 JoinWrappers.lambda(UserDO.class)
|
* 不建议直接 new 该实例,使用 JoinWrappers.lambda(UserDO.class)
|
||||||
*/
|
*/
|
||||||
MPJLambdaWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
|
MPJLambdaWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
|
||||||
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
|
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
|
||||||
SharedString lastSql, SharedString sqlComment, SharedString sqlFirst,
|
SharedString lastSql, SharedString sqlComment, SharedString sqlFirst,
|
||||||
TableList tableList, Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
TableList tableList, Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
||||||
super.setEntity(entity);
|
super.setEntity(entity);
|
||||||
@ -132,6 +132,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
|||||||
this.paramNameValuePairs = paramNameValuePairs;
|
this.paramNameValuePairs = paramNameValuePairs;
|
||||||
this.expression = mergeSegments;
|
this.expression = mergeSegments;
|
||||||
this.sqlSelect = sqlSelect;
|
this.sqlSelect = sqlSelect;
|
||||||
|
this.paramAlias = paramAlias;
|
||||||
this.lastSql = lastSql;
|
this.lastSql = lastSql;
|
||||||
this.sqlComment = sqlComment;
|
this.sqlComment = sqlComment;
|
||||||
this.sqlFirst = sqlFirst;
|
this.sqlFirst = sqlFirst;
|
||||||
@ -207,7 +208,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public <E, F> MPJLambdaWrapper<T> selectSub(Class<E> clazz, String st, Consumer<MPJLambdaWrapper<E>> consumer, SFunction<F, ?> alias) {
|
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,
|
MPJLambdaWrapper<E> wrapper = new MPJLambdaWrapper<E>(null, clazz, SharedString.emptyString(), paramNameSeq, paramNameValuePairs,
|
||||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
new MergeSegments(), this.paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
||||||
new TableList(), null, null, null, null) {
|
new TableList(), null, null, null, null) {
|
||||||
};
|
};
|
||||||
wrapper.tableList.setAlias(st);
|
wrapper.tableList.setAlias(st);
|
||||||
@ -348,7 +349,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
|||||||
@Override
|
@Override
|
||||||
protected MPJLambdaWrapper<T> instance(Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
protected MPJLambdaWrapper<T> instance(Integer index, String keyWord, Class<?> joinClass, String tableName) {
|
||||||
return new MPJLambdaWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
|
return new MPJLambdaWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
|
||||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
new MergeSegments(), this.paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(),
|
||||||
this.tableList, index, keyWord, joinClass, tableName);
|
this.tableList, index, keyWord, joinClass, tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +360,8 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
|||||||
sqlSelect.toNull();
|
sqlSelect.toNull();
|
||||||
selectColumns.clear();
|
selectColumns.clear();
|
||||||
wrapperIndex = new AtomicInteger(0);
|
wrapperIndex = new AtomicInteger(0);
|
||||||
wrapperMap.clear();
|
if (Objects.nonNull(wrapperMap)) wrapperMap.clear();
|
||||||
|
if (Objects.nonNull(unionSql)) unionSql.toEmpty();
|
||||||
resultMapMybatisLabel.clear();
|
resultMapMybatisLabel.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
package com.github.yulichang.test.join.entity;
|
|
||||||
|
|
||||||
public class UserTTT extends UserDO{
|
|
||||||
}
|
|
@ -1094,11 +1094,14 @@ class LambdaWrapperTest {
|
|||||||
.eq(UserDO::getId, 1);
|
.eq(UserDO::getId, 1);
|
||||||
MPJLambdaWrapper<UserDO> wrapper1 = JoinWrappers.lambda(UserDO.class)
|
MPJLambdaWrapper<UserDO> wrapper1 = JoinWrappers.lambda(UserDO.class)
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
.eq(UserDO::getName, "张三 2");
|
.eq(UserDO::getName, "张三 2")
|
||||||
|
.and(w -> w.eq(UserDO::getName, "张三 2"));
|
||||||
MPJLambdaWrapper<UserDO> wrapper2 = JoinWrappers.lambda(UserDO.class)
|
MPJLambdaWrapper<UserDO> wrapper2 = JoinWrappers.lambda(UserDO.class)
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
.eq(UserDO::getPid, 2);
|
.eq(UserDO::getPid, 2);
|
||||||
wrapper.union(wrapper1, wrapper2);
|
wrapper.union(wrapper1, wrapper2);
|
||||||
|
|
||||||
|
System.out.println(wrapper.getUnionSql());
|
||||||
List<UserDO> list = wrapper.list();
|
List<UserDO> list = wrapper.list();
|
||||||
|
|
||||||
assert list.size() == 7;
|
assert list.size() == 7;
|
||||||
|
@ -1146,6 +1146,7 @@ class LambdaWrapperTest {
|
|||||||
val wrapper1: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
val wrapper1: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
||||||
.selectAll(UserDO::class.java)
|
.selectAll(UserDO::class.java)
|
||||||
.eq(UserDO::name, "张三 2")
|
.eq(UserDO::name, "张三 2")
|
||||||
|
.and { a -> a.eq(UserDO::name, "张三 2") }
|
||||||
val wrapper2: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
val wrapper2: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
|
||||||
.selectAll(UserDO::class.java)
|
.selectAll(UserDO::class.java)
|
||||||
.eq(UserDO::pid, 2)
|
.eq(UserDO::pid, 2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user