yulichang 2021-11-18 18:01:50 +08:00
parent c2e575d83b
commit 13ec6499e4
6 changed files with 98 additions and 16 deletions

View File

@ -17,6 +17,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 字段属性
@ -161,8 +162,9 @@ public class MPJTableFieldInfo {
}
private void initBindField(String bindName) {
List<Field> fields = ReflectionKit.getFieldList(ClassUtils.getUserClass(this.joinClass));
Field field = fields.stream().filter(f -> f.getName().equals(bindName)).findFirst().orElse(null);
Field field = TableInfoHelper.getTableInfo(this.joinClass).getFieldList().stream()
.filter(i -> i.getColumn().equals(bindName))
.map(TableFieldInfo::getField).findFirst().orElse(null);
if (field == null) {
throw new MPJException("字段不存在 " + this.joinClass.getName() + " " + bindName);
}

View File

@ -567,7 +567,6 @@ public class MPJTableInfoHelper {
table.setTableName(tableName);
return table;
} catch (Exception e) {
e.printStackTrace();
throw new MPJException("TableInfo 对象拷贝失败 -> " + tableInfo.getEntityType().getName());
}
}

View File

@ -66,13 +66,6 @@ public class MPJSqlInjector extends DefaultSqlInjector {
new SelectById(),
new SelectBatchByIds(),
new SelectByMap()
// new com.baomidou.mybatisplus.core.injector.methods.SelectOne(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectCount(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectMaps(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectMapsPage(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectObjs(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectList(),
// new com.baomidou.mybatisplus.core.injector.methods.SelectPage()
).collect(toList());
list.addAll(getJoinMethod());
list.addAll(getSelectMethod());

View File

@ -39,7 +39,6 @@ import java.util.concurrent.ConcurrentHashMap;
*
* @author yulichang
*/
@SuppressWarnings("unchecked")
@Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
public class MPJInterceptor implements Interceptor {
private static final Log logger = LogFactory.getLog(MPJInterceptor.class);
@ -53,13 +52,14 @@ public class MPJInterceptor implements Interceptor {
private static final Map<String, Map<Configuration, MappedStatement>> MS_CACHE = new ConcurrentHashMap<>();
@Override
@SuppressWarnings({"Java8MapApi", "unchecked"})
public Object intercept(Invocation invocation) throws Throwable {
Object[] args = invocation.getArgs();
if (args[0] instanceof MappedStatement) {
MappedStatement ms = (MappedStatement) args[0];
if (args[1] instanceof Map) {
Map<String, Object> map = (Map<String, Object>) args[1];
Object ew = map.get(Constants.WRAPPER);
Object ew = map.containsKey(Constants.WRAPPER) ? map.get(Constants.WRAPPER) : null;
if (!map.containsKey(Constant.PARAM_TYPE)) {
map.put(Constant.PARAM_TYPE, Objects.nonNull(ew) && (ew instanceof MPJBaseJoin));
} else {

View File

@ -17,10 +17,7 @@ import com.github.yulichang.wrapper.interfaces.Func;
import com.github.yulichang.wrapper.interfaces.Join;
import com.github.yulichang.wrapper.interfaces.on.OnCompare;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
@ -301,6 +298,17 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
() -> String.format("(%s)", inValue)));
}
@Override
public <R> Children groupBy(boolean condition, List<SFunction<R, ?>> columns) {
return maybeDo(condition, () -> {
if (CollectionUtils.isNotEmpty(columns)) {
String one = (StringPool.COMMA + columnsToString(columns));
final String finalOne = one;
appendSqlSegments(GROUP_BY, () -> finalOne);
}
});
}
@Override
public <X> Children groupBy(boolean condition, SFunction<X, ?> column, SFunction<X, ?>... columns) {
return maybeDo(condition, () -> {
@ -313,6 +321,28 @@ public abstract class MPJAbstractWrapper<T, Children extends MPJAbstractWrapper<
});
}
@Override
public <R> Children orderByAsc(boolean condition, List<SFunction<R, ?>> columns) {
return maybeDo(condition, () -> {
final SqlKeyword mode = ASC;
if (CollectionUtils.isNotEmpty(columns)) {
columns.forEach(c -> appendSqlSegments(ORDER_BY,
columnToSqlSegment(columnSqlInjectFilter(c)), mode));
}
});
}
@Override
public <R> Children orderByDesc(boolean condition, List<SFunction<R, ?>> columns) {
return maybeDo(condition, () -> {
final SqlKeyword mode = DESC;
if (CollectionUtils.isNotEmpty(columns)) {
columns.forEach(c -> appendSqlSegments(ORDER_BY,
columnToSqlSegment(columnSqlInjectFilter(c)), mode));
}
});
}
@Override
public <X> Children orderBy(boolean condition, boolean isAsc, SFunction<X, ?> column, SFunction<X, ?>... columns) {
return maybeDo(condition, () -> {

View File

@ -4,6 +4,7 @@ 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;
/**
@ -167,6 +168,25 @@ public interface Func<Children> extends Serializable {
*/
<R> Children notInSql(boolean condition, SFunction<R, ?> column, String inValue);
/**
* ignore
*/
default <R> Children groupBy(SFunction<R, ?> column) {
return groupBy(true, column);
}
/**
* ignore
*/
default <R> Children groupBy(List<SFunction<R, ?>> column) {
return groupBy(true, column);
}
/**
* ignore
*/
<R> Children groupBy(boolean condition, List<SFunction<R, ?>> columns);
/**
* ignore
*/
@ -185,6 +205,25 @@ public interface Func<Children> extends Serializable {
*/
<R> Children groupBy(boolean condition, SFunction<R, ?> column, SFunction<R, ?>... columns);
/**
* ignore
*/
default <R> Children orderByAsc(SFunction<R, ?> column) {
return orderByAsc(true, column);
}
/**
* ignore
*/
default <R> Children orderByAsc(List<SFunction<R, ?>> columns) {
return orderByAsc(true, columns);
}
/**
* ignore
*/
<R> Children orderByAsc(boolean condition, List<SFunction<R, ?>> columns);
/**
* ignore
*/
@ -205,6 +244,25 @@ public interface Func<Children> extends Serializable {
return orderBy(condition, true, column, columns);
}
/**
* ignore
*/
default <R> Children orderByDesc(SFunction<R, ?> column) {
return orderByDesc(true, column);
}
/**
* ignore
*/
default <R> Children orderByDesc(List<SFunction<R, ?>> columns) {
return orderByDesc(true, columns);
}
/**
* ignore
*/
<R> Children orderByDesc(boolean condition, List<SFunction<R, ?>> columns);
/**
* ignore
*/