mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
1.0.9
This commit is contained in:
parent
3274f01d5a
commit
fd49a1fafc
@ -98,7 +98,7 @@ public class JoinLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, JoinLambd
|
||||
/**
|
||||
* 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(...)
|
||||
*/
|
||||
JoinLambdaWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
|
||||
JoinLambdaWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
|
||||
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
|
||||
SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
|
||||
super.setEntity(entity);
|
||||
@ -112,14 +112,9 @@ public class JoinLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, JoinLambd
|
||||
this.sqlFirst = sqlFirst;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 用于生成嵌套 sql
|
||||
* <p>故 sqlSelect 不向下传递</p>
|
||||
*/
|
||||
@Override
|
||||
protected JoinLambdaWrapper<T> instance() {
|
||||
return new JoinLambdaWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
|
||||
return new JoinLambdaWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs,
|
||||
new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
|
||||
}
|
||||
|
||||
|
@ -1,86 +0,0 @@
|
||||
package com.github.yulichang.query;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
|
||||
import com.github.yulichang.toolkit.Constant;
|
||||
import org.apache.ibatis.reflection.property.PropertyNamer;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
import static java.util.stream.Collectors.joining;
|
||||
|
||||
/**
|
||||
* copy {@link com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper}
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class MPJAbstractLambdaWrapper<T, Children extends MPJAbstractLambdaWrapper<T, Children>>
|
||||
extends AbstractWrapper<T, SFunction<T, ?>, Children> {
|
||||
|
||||
private Map<String, ColumnCache> columnMap = null;
|
||||
private boolean initColumnMap = false;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected String columnsToString(SFunction<T, ?>... columns) {
|
||||
return columnsToString(true, columns);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected String columnsToString(boolean onlyColumn, SFunction<T, ?>... columns) {
|
||||
return Arrays.stream(columns).map(i -> columnToString(i, onlyColumn)).collect(joining(StringPool.COMMA));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String columnToString(SFunction<T, ?> column) {
|
||||
return columnToString(column, true);
|
||||
}
|
||||
|
||||
protected String columnToString(SFunction<T, ?> column, boolean onlyColumn) {
|
||||
return Constant.TABLE_ALIAS + StringPool.DOT + getColumn(LambdaUtils.resolve(column), onlyColumn);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 SerializedLambda 对应的列信息,从 lambda 表达式中推测实体类
|
||||
* <p>
|
||||
* 如果获取不到列信息,那么本次条件组装将会失败
|
||||
*
|
||||
* @param lambda lambda 表达式
|
||||
* @param onlyColumn 如果是,结果: "name", 如果否: "name" as "name"
|
||||
* @return 列
|
||||
* @throws com.baomidou.mybatisplus.core.exceptions.MybatisPlusException 获取不到列信息时抛出异常
|
||||
* @see SerializedLambda#getImplClass()
|
||||
* @see SerializedLambda#getImplMethodName()
|
||||
*/
|
||||
private String getColumn(SerializedLambda lambda, boolean onlyColumn) {
|
||||
Class<?> aClass = lambda.getInstantiatedType();
|
||||
tryInitCache(aClass);
|
||||
String fieldName = PropertyNamer.methodToProperty(lambda.getImplMethodName());
|
||||
ColumnCache columnCache = getColumnCache(fieldName, aClass);
|
||||
return onlyColumn ? columnCache.getColumn() : columnCache.getColumnSelect();
|
||||
}
|
||||
|
||||
private void tryInitCache(Class<?> lambdaClass) {
|
||||
if (!initColumnMap) {
|
||||
final Class<T> entityClass = getEntityClass();
|
||||
if (entityClass != null) {
|
||||
lambdaClass = entityClass;
|
||||
}
|
||||
columnMap = LambdaUtils.getColumnMap(lambdaClass);
|
||||
initColumnMap = true;
|
||||
}
|
||||
Assert.notNull(columnMap, "can not find lambda cache for this entity [%s]", lambdaClass.getName());
|
||||
}
|
||||
|
||||
private ColumnCache getColumnCache(String fieldName, Class<?> lambdaClass) {
|
||||
ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(fieldName));
|
||||
Assert.notNull(columnCache, "can not find lambda cache for this property [%s] of entity [%s]",
|
||||
fieldName, lambdaClass.getName());
|
||||
return columnCache;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.github.yulichang.query;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.Query;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
||||
@ -28,7 +29,7 @@ import java.util.stream.Collectors;
|
||||
* sqlSelect 由覆盖改为追加
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public class MPJLambdaQueryWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaQueryWrapper<T>>
|
||||
public class MPJLambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, MPJLambdaQueryWrapper<T>>
|
||||
implements Query<MPJLambdaQueryWrapper<T>, T, SFunction<T, ?>>, MPJJoin<MPJLambdaQueryWrapper<T>> {
|
||||
|
||||
/**
|
||||
@ -112,6 +113,11 @@ public class MPJLambdaQueryWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLam
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String columnToString(SFunction<T, ?> column, boolean onlyColumn) {
|
||||
return Constant.TABLE_ALIAS + StringPool.DOT + super.columnToString(column, onlyColumn);
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public final MPJLambdaQueryWrapper<T> select(String... columns) {
|
||||
return select(true, columns);
|
||||
|
Loading…
x
Reference in New Issue
Block a user