Browse Source

3.0.1-SNAPSHOT 走起!!先扔一波狗粮

hubin 7 years ago
parent
commit
d85c2d23e5

+ 1 - 1
mybatis-plus-adapter/src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

@@ -26,10 +26,10 @@ import com.baomidou.mybatisplus.core.enums.SqlLike;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
-import com.baomidou.mybatisplus.extension.toolkit.ObjectUtils;
 
 
 /**

+ 44 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -35,12 +35,14 @@ import static com.baomidou.mybatisplus.core.enums.SqlKeyword.NE;
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.NOT;
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.OR;
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ORDER_BY;
+import static java.util.stream.Collectors.joining;
 
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -54,6 +56,7 @@ import com.baomidou.mybatisplus.core.conditions.interfaces.Nested;
 import com.baomidou.mybatisplus.core.enums.SqlKeyword;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 
@@ -67,6 +70,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  */
 public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, This>> extends Wrapper<T>
     implements Compare<This, R>, Nested<This>, Join<This>, Func<This, R>, Serializable {
+
     /**
      * 前缀
      */
@@ -101,6 +105,21 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
         return typedThis;
     }
 
+    @Override
+    public This allEq(boolean condition, Map<R, Object> params) {
+        if (condition && ObjectUtils.isNotEmpty(params)) {
+            Iterator iterator = params.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<R, Object> entry = (Map.Entry<R, Object>) iterator.next();
+                Object value = entry.getValue();
+                if (StringUtils.checkValNotNull(value)) {
+                    and().eq(entry.getKey(), value);
+                }
+            }
+        }
+        return typedThis;
+    }
+
     /**
      * 等于 =
      */
@@ -329,17 +348,36 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
     }
 
     @Override
-    public This groupBy(boolean condition, R column) {
-        return doIt(condition, GROUP_BY, () -> columnToString(column));
+    public This groupBy(boolean condition, R... columns) {
+        if (ArrayUtils.isEmpty(columns)) {
+            return typedThis;
+        }
+        return doIt(condition, GROUP_BY, () -> columnsToString(columns));
     }
 
     @Override
-    public This orderBy(boolean condition, R column, boolean isAsc) {
+    public This orderBy(boolean condition, boolean isAsc, R... columns) {
+        if (ArrayUtils.isEmpty(columns)) {
+            return typedThis;
+        }
         if (condition && !didOrderBy) {
             didOrderBy = true;
-            return doIt(true, ORDER_BY, () -> columnToString(column), isAsc ? ASC : DESC);
+            return doIt(true, ORDER_BY, () -> columnsToString(columns), isAsc ? ASC : DESC);
         }
-        return doIt(condition, () -> ",", () -> columnToString(column), isAsc ? ASC : DESC);
+        return doIt(condition, () -> ",", () -> columnsToString(columns), isAsc ? ASC : DESC);
+    }
+
+    /**
+     * <p>
+     * 多字段转换为逗号 "," 分割字符串
+     * </p>
+     *
+     * @param columns 多字段
+     * @return
+     */
+    protected String columnsToString(R... columns) {
+        return Arrays.stream(columns).map(c -> columnsToString(columns))
+            .collect(joining(","));
     }
 
     /**
@@ -458,7 +496,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
      */
     private ISqlSegment inExpression(Collection<?> value) {
         return () -> value.stream().map(i -> formatSql("{0}", i))
-            .collect(Collectors.joining(",", "(", ")"));
+            .collect(joining(",", "(", ")"));
     }
 
     /**

+ 8 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Compare.java

@@ -16,6 +16,7 @@
 package com.baomidou.mybatisplus.core.conditions.interfaces;
 
 import java.io.Serializable;
+import java.util.Map;
 
 /**
  * <p>
@@ -28,6 +29,13 @@ import java.io.Serializable;
  */
 public interface Compare<This, R> extends Serializable {
 
+
+    default This allEq(Map<R, Object> params) {
+        return allEq(true, params);
+    }
+
+    This allEq(boolean condition, Map<R, Object> params);
+
     /**
      * 等于 =
      */

+ 41 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java

@@ -111,42 +111,72 @@ public interface Func<This, R> extends Serializable {
     }
 
     /**
+     * <p>
      * 分组:GROUP BY 字段, ...
+     * </p>
+     *
+     * @param columns 分组字段【可多个】
+     * @return
      */
-    default This groupBy(R column) {
-        return groupBy(true, column);
+    default This groupBy(R... columns) {
+        return groupBy(true, columns);
     }
 
     /**
+     * <p>
      * 分组:GROUP BY 字段, ...
+     * </p>
+     *
+     * @param condition 执行条件
+     * @param columns   分组字段【可多个】
+     * @return
      */
-    This groupBy(boolean condition, R column);
+    This groupBy(boolean condition, R... columns);
 
     /**
-     * 排序:ORDER BY 字段, ...
+     * <p>
+     * 排序:ORDER BY 字段, ... ASC
+     * </p>
+     *
+     * @param condition 执行条件
+     * @param columns   排序字段【可多个】
+     * @return
+     */
+    default This orderByAsc(boolean condition, R... columns) {
+        return orderBy(condition, true, columns);
+    }
+
+    /**
+     * <p>
+     * 排序:ORDER BY 字段, ... DESC
+     * </p>
+     *
+     * @param condition 执行条件
+     * @param columns   排序字段【可多个】
+     * @return
      */
-    default This orderBy(R column) {
-        return orderBy(true, column);
+    default This orderByDesc(boolean condition, R... columns) {
+        return orderBy(condition, false, columns);
     }
 
     /**
      * 排序:ORDER BY 字段, ...
      */
-    default This orderBy(boolean condition, R column) {
-        return orderBy(condition, column, true);
+    default This orderByAsc(R... columns) {
+        return orderBy(true, true, columns);
     }
 
     /**
      * 排序:ORDER BY 字段, ...
      */
-    default This orderBy(R column, boolean isAsc) {
-        return orderBy(true, column, isAsc);
+    default This orderByDesc(R... columns) {
+        return orderBy(true, false, columns);
     }
 
     /**
      * 排序:ORDER BY 字段, ...
      */
-    This orderBy(boolean condition, R column, boolean isAsc);
+    This orderBy(boolean condition, boolean isAsc, R... columns);
 
     /**
      * HAVING ( sql 语句 )

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java

@@ -403,8 +403,8 @@ public abstract class AbstractMethod {
      */
     protected String sqlWhereEntityWrapper(TableInfo table) {
         StringBuilder where = new StringBuilder(128);
-        where.append("<where>");
         where.append("<if test=\"ew!=null\">");
+        where.append("<trim prefix=\"WHERE\" prefixOverrides=\"AND|OR\">");
         where.append("<if test=\"ew.entity!=null\">");
         if (StringUtils.isNotEmpty(table.getKeyProperty())) {
             where.append("<if test=\"ew.entity.").append(table.getKeyProperty()).append("!=null\">");
@@ -420,8 +420,8 @@ public abstract class AbstractMethod {
         }
         where.append("</if>");
         where.append("<if test=\"ew.sqlSegment!=null\"> AND ${ew.sqlSegment}</if>");
+        where.append("</trim>");
         where.append("</if>");
-        where.append("</where>");
         return where.toString();
     }
 

+ 16 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/IPage.java

@@ -16,6 +16,7 @@
 package com.baomidou.mybatisplus.core.metadata;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -49,6 +50,17 @@ public interface IPage<T> {
         return null;
     }
 
+    /**
+     * <p>
+     * KEY/VALUE 条件
+     * </p>
+     *
+     * @return
+     */
+    default Map<Object, Object> condition() {
+        return null;
+    }
+
     /**
      * <p>
      * 自动优化 COUNT SQL
@@ -68,7 +80,7 @@ public interface IPage<T> {
      * @return
      */
     default long offset() {
-        return this.getCurrent() > 0 ? (this.getCurrent() - 1) * this.getSize() : 0;
+        return getCurrent() > 0 ? (getCurrent() - 1) * getSize() : 0;
     }
 
     /**
@@ -79,11 +91,11 @@ public interface IPage<T> {
      * @return
      */
     default long getPages() {
-        if (this.getSize() == 0) {
+        if (getSize() == 0) {
             return 0L;
         }
-        long pages = this.getTotal() / this.getSize();
-        if (this.getTotal() % this.getSize() != 0) {
+        long pages = getTotal() / getSize();
+        if (getTotal() % getSize() != 0) {
             pages++;
         }
         return pages;

+ 4 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/ObjectUtils.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ObjectUtils.java

@@ -1,4 +1,4 @@
-package com.baomidou.mybatisplus.extension.toolkit;
+package com.baomidou.mybatisplus.core.toolkit;
 
 import java.lang.reflect.Array;
 import java.util.Collection;
@@ -20,7 +20,7 @@ public class ObjectUtils {
      */
     public static boolean isNull(Object... objs) {
         for (Object obj : objs) {
-            if (isEmpty(obj)) {
+            if (ObjectUtils.isEmpty(obj)) {
                 return true;
             }
         }
@@ -32,14 +32,14 @@ public class ObjectUtils {
      * 判断object是否不为空,集合会校验size
      */
     public static boolean isNotNull(Object... obj) {
-        return !isNull(obj);
+        return !ObjectUtils.isNull(obj);
     }
 
     /**
      * 对象非空判断
      */
     public static boolean isNotEmpty(Object obj) {
-        return !isEmpty(obj);
+        return !ObjectUtils.isEmpty(obj);
     }
 
     /**

+ 14 - 39
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlHelper.java

@@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 
 /**
@@ -58,7 +59,7 @@ public class SqlHelper {
      * @return SqlSession
      */
     public static SqlSession sqlSession(Class<?> clazz) {
-        return sqlSession(clazz, true);
+        return SqlHelper.sqlSession(clazz, true);
     }
 
     /**
@@ -103,7 +104,7 @@ public class SqlHelper {
      * @return SqlSession
      */
     public static SqlSession sqlSession(Class<?> clazz, boolean autoCommit) {
-        SqlSession sqlSession = getSqlSession(clazz);
+        SqlSession sqlSession = SqlHelper.getSqlSession(clazz);
         return (sqlSession != null) ? sqlSession : GlobalConfigUtils.currentSessionFactory(clazz).openSession(autoCommit);
     }
 
@@ -172,7 +173,7 @@ public class SqlHelper {
         if (CollectionUtils.isNotEmpty(list)) {
             int size = list.size();
             if (size > 1) {
-                logger.warn(String.format("Warn: execute Method There are  %s results.", size));
+                SqlHelper.logger.warn(String.format("Warn: execute Method There are  %s results.", size));
             }
             return list.get(0);
         }
@@ -192,42 +193,16 @@ public class SqlHelper {
             return wrapper;
         }
         // wrapper 不存创建一个 Condition
-        if (isEmptyOfWrapper(wrapper)) {
-            wrapper = new QueryWrapper<>();
+        QueryWrapper qw = new QueryWrapper<>();
+        // 排序
+        if (CollectionUtils.isNotEmpty(page.ascs())) {
+            qw.orderByAsc(page.ascs());
+            qw.orderByDesc(page.descs());
         }
-        // 排序 fixed gitee issues/IHF7N
-//        if (page.isOpenSort() && page.isSearchCount()) {
-//            wrapper.orderAsc(page.getAscs());
-//            wrapper.orderDesc(page.getDescs());
-//        }
-//        // MAP 参数查询
-//        if (MapUtils.isNotEmpty(page.getCondition())) {
-//            wrapper.allEq(page.getCondition());
-//        }
-        return wrapper;
-    }
-
-    /**
-     * <p>
-     * 判断Wrapper为空
-     * </p>
-     *
-     * @param wrapper SQL包装对象
-     * @return
-     */
-    public static boolean isEmptyOfWrapper(Wrapper<?> wrapper) {
-        return null == wrapper;// || wrapper.isEmpty();
-    }
-
-    /**
-     * <p>
-     * 判断Wrapper不为空
-     * </p>
-     *
-     * @param wrapper SQL包装对象
-     * @return
-     */
-    public static boolean isNotEmptyOfWrapper(Wrapper<?> wrapper) {
-        return !isEmptyOfWrapper(wrapper);
+        // MAP 参数查询
+        if (ObjectUtils.isNotEmpty(page.condition())) {
+            qw.allEq(page.condition());
+        }
+        return qw;
     }
 }

+ 20 - 20
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/api/ApiAssert.java

@@ -19,8 +19,8 @@ import java.util.Collection;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.exceptions.ApiException;
-import com.baomidou.mybatisplus.extension.toolkit.ObjectUtils;
 
 /**
  * <p>
@@ -42,7 +42,7 @@ public class ApiAssert {
      */
     public static void gtZero(Integer num, IErrorCode errorCode) {
         if (num == null || num <= 0) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -51,7 +51,7 @@ public class ApiAssert {
      */
     public static void geZero(Integer num, IErrorCode errorCode) {
         if (num == null || num < 0) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -60,7 +60,7 @@ public class ApiAssert {
      */
     public static void gt(Integer num1, Integer num2, IErrorCode errorCode) {
         if (num1 <= num2) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -69,7 +69,7 @@ public class ApiAssert {
      */
     public static void ge(Integer num1, Integer num2, IErrorCode errorCode) {
         if (num1 < num2) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -78,31 +78,31 @@ public class ApiAssert {
      */
     public static void eq(Object obj1, Object obj2, IErrorCode errorCode) {
         if (!obj1.equals(obj2)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void isTrue(boolean condition, IErrorCode errorCode) {
         if (!condition) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void isFalse(boolean condition, IErrorCode errorCode) {
         if (condition) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void isNull(IErrorCode errorCode, Object... conditions) {
         if (ObjectUtils.isNotNull(conditions)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void notNull(IErrorCode errorCode, Object... conditions) {
         if (ObjectUtils.isNull(conditions)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -119,7 +119,7 @@ public class ApiAssert {
 
     public static void fail(boolean condition, IErrorCode errorCode) {
         if (condition) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -129,13 +129,13 @@ public class ApiAssert {
 
     public static void fail(boolean condition, String message) {
         if (condition) {
-            fail(message);
+            ApiAssert.fail(message);
         }
     }
 
     public static void notEmpty(Object[] array, IErrorCode errorCode) {
         if (ObjectUtils.isEmpty(array)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
@@ -143,7 +143,7 @@ public class ApiAssert {
         if (array != null) {
             for (Object element : array) {
                 if (element == null) {
-                    fail(errorCode);
+                    ApiAssert.fail(errorCode);
                 }
             }
         }
@@ -151,27 +151,27 @@ public class ApiAssert {
 
     public static void notEmpty(Collection<?> collection, IErrorCode errorCode) {
         if (CollectionUtils.isNotEmpty(collection)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void notEmpty(Map<?, ?> map, IErrorCode errorCode) {
         if (ObjectUtils.isEmpty(map)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void isInstanceOf(Class<?> type, Object obj, IErrorCode errorCode) {
-        notNull(errorCode, type);
+        ApiAssert.notNull(errorCode, type);
         if (!type.isInstance(obj)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 
     public static void isAssignable(Class<?> superType, Class<?> subType, IErrorCode errorCode) {
-        notNull(errorCode, superType);
+        ApiAssert.notNull(errorCode, superType);
         if (subType == null || !superType.isAssignableFrom(subType)) {
-            fail(errorCode);
+            ApiAssert.fail(errorCode);
         }
     }
 

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java

@@ -32,12 +32,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.extension.toolkit.ObjectUtils;
 
 /**
  * <p>