diff --git a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableFieldInfo.java b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableFieldInfo.java index 92dc1eb..7b8e1f0 100644 --- a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableFieldInfo.java +++ b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableFieldInfo.java @@ -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 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); } diff --git a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java index b62cd21..d1759a3 100644 --- a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java +++ b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java @@ -567,7 +567,6 @@ public class MPJTableInfoHelper { table.setTableName(tableName); return table; } catch (Exception e) { - e.printStackTrace(); throw new MPJException("TableInfo 对象拷贝失败 -> " + tableInfo.getEntityType().getName()); } } diff --git a/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java b/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java index 7b022f2..13f4d79 100644 --- a/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java +++ b/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java @@ -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()); diff --git a/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index daaaccb..60a9bf9 100644 --- a/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -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> 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 map = (Map) 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 { diff --git a/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java b/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java index 84a8e42..8f817d6 100644 --- a/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java +++ b/src/main/java/com/github/yulichang/wrapper/MPJAbstractWrapper.java @@ -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 String.format("(%s)", inValue))); } + @Override + public Children groupBy(boolean condition, List> columns) { + return maybeDo(condition, () -> { + if (CollectionUtils.isNotEmpty(columns)) { + String one = (StringPool.COMMA + columnsToString(columns)); + final String finalOne = one; + appendSqlSegments(GROUP_BY, () -> finalOne); + } + }); + } + @Override public Children groupBy(boolean condition, SFunction column, SFunction... columns) { return maybeDo(condition, () -> { @@ -313,6 +321,28 @@ public abstract class MPJAbstractWrapper Children orderByAsc(boolean condition, List> columns) { + return maybeDo(condition, () -> { + final SqlKeyword mode = ASC; + if (CollectionUtils.isNotEmpty(columns)) { + columns.forEach(c -> appendSqlSegments(ORDER_BY, + columnToSqlSegment(columnSqlInjectFilter(c)), mode)); + } + }); + } + + @Override + public Children orderByDesc(boolean condition, List> columns) { + return maybeDo(condition, () -> { + final SqlKeyword mode = DESC; + if (CollectionUtils.isNotEmpty(columns)) { + columns.forEach(c -> appendSqlSegments(ORDER_BY, + columnToSqlSegment(columnSqlInjectFilter(c)), mode)); + } + }); + } + @Override public Children orderBy(boolean condition, boolean isAsc, SFunction column, SFunction... columns) { return maybeDo(condition, () -> { diff --git a/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java b/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java index 93fbb71..abbecba 100644 --- a/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java +++ b/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java @@ -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 extends Serializable { */ Children notInSql(boolean condition, SFunction column, String inValue); + /** + * ignore + */ + default Children groupBy(SFunction column) { + return groupBy(true, column); + } + + /** + * ignore + */ + default Children groupBy(List> column) { + return groupBy(true, column); + } + + /** + * ignore + */ + Children groupBy(boolean condition, List> columns); + /** * ignore */ @@ -185,6 +205,25 @@ public interface Func extends Serializable { */ Children groupBy(boolean condition, SFunction column, SFunction... columns); + /** + * ignore + */ + default Children orderByAsc(SFunction column) { + return orderByAsc(true, column); + } + + /** + * ignore + */ + default Children orderByAsc(List> columns) { + return orderByAsc(true, columns); + } + + /** + * ignore + */ + Children orderByAsc(boolean condition, List> columns); + /** * ignore */ @@ -205,6 +244,25 @@ public interface Func extends Serializable { return orderBy(condition, true, column, columns); } + /** + * ignore + */ + default Children orderByDesc(SFunction column) { + return orderByDesc(true, column); + } + + /** + * ignore + */ + default Children orderByDesc(List> columns) { + return orderByDesc(true, columns); + } + + /** + * ignore + */ + Children orderByDesc(boolean condition, List> columns); + /** * ignore */