yulichang 2023-10-31 01:38:06 +08:00
parent 91c67c5e82
commit bb93df99b4
8 changed files with 36 additions and 31 deletions

View File

@ -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;
} }

View File

@ -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();

View File

@ -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;

View File

@ -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;
} }

View File

@ -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();
} }
} }

View File

@ -1,4 +0,0 @@
package com.github.yulichang.test.join.entity;
public class UserTTT extends UserDO{
}

View File

@ -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;

View File

@ -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)