Browse Source

[修改] 拓展ChainWrapper通用性

Caratacus 6 years ago
parent
commit
004adb7a0f

+ 41 - 56
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/additional/AbstractChainWrapper.java

@@ -15,6 +15,11 @@
  */
 package com.baomidou.mybatisplus.extension.service.additional;
 
+import java.util.Collection;
+import java.util.Map;
+import java.util.function.BiPredicate;
+import java.util.function.Function;
+
 import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Compare;
@@ -22,14 +27,8 @@ import com.baomidou.mybatisplus.core.conditions.interfaces.Func;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Join;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Nested;
 import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 
-import java.util.Collection;
-import java.util.Map;
-import java.util.function.BiPredicate;
-import java.util.function.Function;
-
 /**
  * 所有包装类都继承此抽象类,此抽象类代理了大部分生成 where 条件的方法
  * <li> 泛型: Children ,表示子类 </li>
@@ -40,36 +39,21 @@ import java.util.function.Function;
  */
 @SuppressWarnings({"serial", "unchecked"})
 public abstract class AbstractChainWrapper<T, R, Children extends AbstractChainWrapper<T, R, Children, Param>, Param>
-    extends Wrapper<T> implements Compare<Children, R>, Func<Children, R>, Join<Children>, Nested<Param, Children>,
-    ChainWrapper<T> {
+    extends Wrapper<T> implements Compare<Children, R>, Func<Children, R>, Join<Children>, Nested<Param, Children> {
+
     protected final Children typedThis = (Children) this;
     /**
      * 子类所包装的具体 Wrapper 类型
      */
     protected Param wrapperChildren;
-    private BaseMapper<T> baseMapper;
 
     /**
      * 必须的构造函数
-     * 子类必须给 wrapperChildren 赋值
-     *
-     * @param baseMapper BaseMapper
      */
-    public AbstractChainWrapper(BaseMapper<T> baseMapper) {
-        this.baseMapper = baseMapper;
-    }
-
-    @Override
-    public BaseMapper<T> getBaseMapper() {
-        return baseMapper;
+    public AbstractChainWrapper() {
     }
 
-    @Override
-    public Wrapper<T> getWrapper() {
-        return (Wrapper<T>) wrapperChildren;
-    }
-
-    private AbstractWrapper getAbstractWrapper() {
+    public AbstractWrapper getWrapper() {
         return (AbstractWrapper) wrapperChildren;
     }
 
@@ -90,187 +74,187 @@ public abstract class AbstractChainWrapper<T, R, Children extends AbstractChainW
 
     @Override
     public <V> Children allEq(boolean condition, Map<R, V> params, boolean null2IsNull) {
-        getAbstractWrapper().allEq(condition, params, null2IsNull);
+        getWrapper().allEq(condition, params, null2IsNull);
         return typedThis;
     }
 
     @Override
     public <V> Children allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) {
-        getAbstractWrapper().allEq(condition, filter, params, null2IsNull);
+        getWrapper().allEq(condition, filter, params, null2IsNull);
         return typedThis;
     }
 
     @Override
     public Children eq(boolean condition, R column, Object val) {
-        getAbstractWrapper().eq(condition, column, val);
+        getWrapper().eq(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children ne(boolean condition, R column, Object val) {
-        getAbstractWrapper().ne(condition, column, val);
+        getWrapper().ne(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children gt(boolean condition, R column, Object val) {
-        getAbstractWrapper().gt(condition, column, val);
+        getWrapper().gt(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children ge(boolean condition, R column, Object val) {
-        getAbstractWrapper().ge(condition, column, val);
+        getWrapper().ge(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children lt(boolean condition, R column, Object val) {
-        getAbstractWrapper().lt(condition, column, val);
+        getWrapper().lt(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children le(boolean condition, R column, Object val) {
-        getAbstractWrapper().le(condition, column, val);
+        getWrapper().le(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children between(boolean condition, R column, Object val1, Object val2) {
-        getAbstractWrapper().between(condition, column, val1, val2);
+        getWrapper().between(condition, column, val1, val2);
         return typedThis;
     }
 
     @Override
     public Children notBetween(boolean condition, R column, Object val1, Object val2) {
-        getAbstractWrapper().notBetween(condition, column, val1, val2);
+        getWrapper().notBetween(condition, column, val1, val2);
         return typedThis;
     }
 
     @Override
     public Children like(boolean condition, R column, Object val) {
-        getAbstractWrapper().like(condition, column, val);
+        getWrapper().like(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children notLike(boolean condition, R column, Object val) {
-        getAbstractWrapper().notLike(condition, column, val);
+        getWrapper().notLike(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children likeLeft(boolean condition, R column, Object val) {
-        getAbstractWrapper().likeLeft(condition, column, val);
+        getWrapper().likeLeft(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children likeRight(boolean condition, R column, Object val) {
-        getAbstractWrapper().likeRight(condition, column, val);
+        getWrapper().likeRight(condition, column, val);
         return typedThis;
     }
 
     @Override
     public Children isNull(boolean condition, R column) {
-        getAbstractWrapper().isNull(condition, column);
+        getWrapper().isNull(condition, column);
         return typedThis;
     }
 
     @Override
     public Children isNotNull(boolean condition, R column) {
-        getAbstractWrapper().isNotNull(condition, column);
+        getWrapper().isNotNull(condition, column);
         return typedThis;
     }
 
     @Override
     public Children in(boolean condition, R column, Collection<?> coll) {
-        getAbstractWrapper().in(condition, column, coll);
+        getWrapper().in(condition, column, coll);
         return typedThis;
     }
 
     @Override
     public Children notIn(boolean condition, R column, Collection<?> coll) {
-        getAbstractWrapper().notIn(condition, column, coll);
+        getWrapper().notIn(condition, column, coll);
         return typedThis;
     }
 
     @Override
     public Children inSql(boolean condition, R column, String inValue) {
-        getAbstractWrapper().inSql(condition, column, inValue);
+        getWrapper().inSql(condition, column, inValue);
         return typedThis;
     }
 
     @Override
     public Children notInSql(boolean condition, R column, String inValue) {
-        getAbstractWrapper().notInSql(condition, column, inValue);
+        getWrapper().notInSql(condition, column, inValue);
         return typedThis;
     }
 
     @Override
     public Children groupBy(boolean condition, R... columns) {
-        getAbstractWrapper().groupBy(condition, columns);
+        getWrapper().groupBy(condition, columns);
         return typedThis;
     }
 
     @Override
     public Children orderBy(boolean condition, boolean isAsc, R... columns) {
-        getAbstractWrapper().orderBy(condition, isAsc, columns);
+        getWrapper().orderBy(condition, isAsc, columns);
         return typedThis;
     }
 
     @Override
     public Children having(boolean condition, String sqlHaving, Object... params) {
-        getAbstractWrapper().having(condition, sqlHaving, params);
+        getWrapper().having(condition, sqlHaving, params);
         return typedThis;
     }
 
     @Override
     public Children or(boolean condition) {
-        getAbstractWrapper().or(condition);
+        getWrapper().or(condition);
         return typedThis;
     }
 
     @Override
     public Children apply(boolean condition, String applySql, Object... value) {
-        getAbstractWrapper().apply(condition, applySql, value);
+        getWrapper().apply(condition, applySql, value);
         return typedThis;
     }
 
     @Override
     public Children last(boolean condition, String lastSql) {
-        getAbstractWrapper().last(condition, lastSql);
+        getWrapper().last(condition, lastSql);
         return typedThis;
     }
 
     @Override
     public Children exists(boolean condition, String existsSql) {
-        getAbstractWrapper().exists(condition, existsSql);
+        getWrapper().exists(condition, existsSql);
         return typedThis;
     }
 
     @Override
     public Children notExists(boolean condition, String notExistsSql) {
-        getAbstractWrapper().notExists(condition, notExistsSql);
+        getWrapper().notExists(condition, notExistsSql);
         return typedThis;
     }
 
     @Override
     public Children and(boolean condition, Function<Param, Param> func) {
-        getAbstractWrapper().and(condition, func);
+        getWrapper().and(condition, func);
         return typedThis;
     }
 
     @Override
     public Children or(boolean condition, Function<Param, Param> func) {
-        getAbstractWrapper().or(condition, func);
+        getWrapper().or(condition, func);
         return typedThis;
     }
 
     @Override
     public Children nested(boolean condition, Function<Param, Param> func) {
-        getAbstractWrapper().nested(condition, func);
+        getWrapper().nested(condition, func);
         return typedThis;
     }
 
@@ -278,4 +262,5 @@ public abstract class AbstractChainWrapper<T, R, Children extends AbstractChainW
     public String getSqlSegment() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSegment");
     }
+
 }

+ 13 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/additional/query/impl/LambdaQueryChainWrapper.java

@@ -15,6 +15,8 @@
  */
 package com.baomidou.mybatisplus.extension.service.additional.query.impl;
 
+import java.util.function.Predicate;
+
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.Query;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -24,8 +26,6 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.additional.AbstractChainWrapper;
 import com.baomidou.mybatisplus.extension.service.additional.query.ChainQuery;
 
-import java.util.function.Predicate;
-
 /**
  * @author miemie
  * @since 2018-12-19
@@ -34,9 +34,12 @@ import java.util.function.Predicate;
 public class LambdaQueryChainWrapper<T> extends AbstractChainWrapper<T, SFunction<T, ?>, LambdaQueryChainWrapper<T>, LambdaQueryWrapper<T>>
     implements ChainQuery<T>, Query<LambdaQueryChainWrapper<T>, T, SFunction<T, ?>> {
 
+    private BaseMapper<T> baseMapper;
+
     public LambdaQueryChainWrapper(BaseMapper<T> baseMapper) {
-        super(baseMapper);
-        wrapperChildren = new LambdaQueryWrapper<>();
+        super();
+        this.baseMapper = baseMapper;
+        super.wrapperChildren = new LambdaQueryWrapper<>();
     }
 
     @SafeVarargs
@@ -62,4 +65,10 @@ public class LambdaQueryChainWrapper<T> extends AbstractChainWrapper<T, SFunctio
     public String getSqlSelect() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSelect");
     }
+
+    @Override
+    public BaseMapper<T> getBaseMapper() {
+        return baseMapper;
+    }
+
 }

+ 13 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/additional/query/impl/QueryChainWrapper.java

@@ -15,6 +15,8 @@
  */
 package com.baomidou.mybatisplus.extension.service.additional.query.impl;
 
+import java.util.function.Predicate;
+
 import com.baomidou.mybatisplus.core.conditions.query.Query;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -23,8 +25,6 @@ import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.extension.service.additional.AbstractChainWrapper;
 import com.baomidou.mybatisplus.extension.service.additional.query.ChainQuery;
 
-import java.util.function.Predicate;
-
 /**
  * @author miemie
  * @since 2018-12-19
@@ -33,9 +33,12 @@ import java.util.function.Predicate;
 public class QueryChainWrapper<T> extends AbstractChainWrapper<T, String, QueryChainWrapper<T>, QueryWrapper<T>>
     implements ChainQuery<T>, Query<QueryChainWrapper<T>, T, String> {
 
+    private BaseMapper<T> baseMapper;
+
     public QueryChainWrapper(BaseMapper<T> baseMapper) {
-        super(baseMapper);
-        wrapperChildren = new QueryWrapper<>();
+        super();
+        this.baseMapper = baseMapper;
+        super.wrapperChildren = new QueryWrapper<>();
     }
 
     @Override
@@ -60,4 +63,10 @@ public class QueryChainWrapper<T> extends AbstractChainWrapper<T, String, QueryC
     public String getSqlSelect() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSelect");
     }
+
+    @Override
+    public BaseMapper<T> getBaseMapper() {
+        return baseMapper;
+    }
+
 }

+ 11 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/additional/update/impl/LambdaUpdateChainWrapper.java

@@ -31,9 +31,12 @@ import com.baomidou.mybatisplus.extension.service.additional.update.ChainUpdate;
 public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFunction<T, ?>, LambdaUpdateChainWrapper<T>, LambdaUpdateWrapper<T>>
     implements ChainUpdate<T>, Update<LambdaUpdateChainWrapper<T>, SFunction<T, ?>> {
 
+    private BaseMapper<T> baseMapper;
+
     public LambdaUpdateChainWrapper(BaseMapper<T> baseMapper) {
-        super(baseMapper);
-        wrapperChildren = new LambdaUpdateWrapper<>();
+        super();
+        this.baseMapper = baseMapper;
+        super.wrapperChildren = new LambdaUpdateWrapper<>();
     }
 
     @Override
@@ -52,4 +55,10 @@ public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFuncti
     public String getSqlSet() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSet");
     }
+
+    @Override
+    public BaseMapper<T> getBaseMapper() {
+        return baseMapper;
+    }
+
 }

+ 11 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/additional/update/impl/UpdateChainWrapper.java

@@ -30,9 +30,12 @@ import com.baomidou.mybatisplus.extension.service.additional.update.ChainUpdate;
 public class UpdateChainWrapper<T> extends AbstractChainWrapper<T, String, UpdateChainWrapper<T>, UpdateWrapper<T>>
     implements ChainUpdate<T>, Update<UpdateChainWrapper<T>, String> {
 
+    private BaseMapper<T> baseMapper;
+
     public UpdateChainWrapper(BaseMapper<T> baseMapper) {
-        super(baseMapper);
-        wrapperChildren = new UpdateWrapper<>();
+        super();
+        this.baseMapper = baseMapper;
+        super.wrapperChildren = new UpdateWrapper<>();
     }
 
     @Override
@@ -51,4 +54,10 @@ public class UpdateChainWrapper<T> extends AbstractChainWrapper<T, String, Updat
     public String getSqlSet() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSet");
     }
+
+    @Override
+    public BaseMapper<T> getBaseMapper() {
+        return baseMapper;
+    }
+
 }