瀏覽代碼

提取wrapper部分方法到接口上

miemie 6 年之前
父節點
當前提交
952f045669

+ 0 - 7
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/Wrapper.java

@@ -45,13 +45,6 @@ public abstract class Wrapper<T> implements ISqlSegment {
      */
     public abstract T getEntity();
 
-    /**
-     * 更新 SQL 片段(子类实现)
-     */
-    public String getSqlSet() {
-        return null;
-    }
-
     /**
      * 获取 MergeSegments
      */

+ 40 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/Query.java

@@ -1,3 +1,18 @@
+/*
+ * Copyright (c) 2011-2020, hubin (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package com.baomidou.mybatisplus.core.conditions.query;
 
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
@@ -11,10 +26,35 @@ import java.util.function.Predicate;
  */
 public interface Query<This, T, R> extends Serializable {
 
+    /**
+     * 设置查询字段
+     *
+     * @param columns 字段数组
+     * @return children
+     */
     This select(R... columns);
 
+    /**
+     * ignore
+     * <li> 注意只有内部有 entity 才能使用该方法 </li>
+     */
     This select(Predicate<TableFieldInfo> predicate);
 
+    /**
+     * <p>
+     * 过滤查询的字段信息(主键除外!)
+     * </p>
+     * <p>
+     * 例1: 只要 java 字段名以 "test" 开头的              -> select(i -> i.getProperty().startsWith("test"))
+     * 例2: 只要 java 字段属性是 CharSequence 类型的       -> select(TableFieldInfo::isCharSequence)
+     * 例3: 只要 java 字段没有填充策略的                   -> select(i -> i.getFieldFill() == FieldFill.DEFAULT)
+     * 例4: 要全部字段                                   -> select(i -> true)
+     * 例5: 只要主键字段                                 -> select(i -> false)
+     * </p>
+     *
+     * @param predicate 过滤方式
+     * @return this
+     */
     This select(Class<T> entityClass, Predicate<TableFieldInfo> predicate);
 
     /**

+ 9 - 24
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java

@@ -86,21 +86,6 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return select(entityClass, predicate);
     }
 
-    /**
-     * <p>
-     * 过滤查询的字段信息(主键除外!)
-     * </p>
-     * <p>
-     * 例1: 只要 java 字段名以 "test" 开头的              -> select(i -> i.getProperty().startsWith("test"))
-     * 例2: 只要 java 字段属性是 CharSequence 类型的       -> select(TableFieldInfo::isCharSequence)
-     * 例3: 只要 java 字段没有填充策略的                   -> select(i -> i.getFieldFill() == FieldFill.DEFAULT)
-     * 例4: 要全部字段                                   -> select(i -> true)
-     * 例5: 只要主键字段                                 -> select(i -> false)
-     * </p>
-     *
-     * @param predicate 过滤方式
-     * @return this
-     */
     @Override
     public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
         this.entityClass = entityClass;
@@ -108,15 +93,6 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return typedThis;
     }
 
-    /**
-     * <p>
-     * 返回一个支持 lambda 函数写法的 wrapper
-     * </p>
-     */
-    public LambdaQueryWrapper<T> lambda() {
-        return new LambdaQueryWrapper<>(entity, entityClass, sqlSelect, paramNameSeq, paramNameValuePairs, expression);
-    }
-
     @Override
     public String getSqlSelect() {
         return sqlSelect.getStringValue();
@@ -127,6 +103,15 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return column;
     }
 
+    /**
+     * <p>
+     * 返回一个支持 lambda 函数写法的 wrapper
+     * </p>
+     */
+    public LambdaQueryWrapper<T> lambda() {
+        return new LambdaQueryWrapper<>(entity, entityClass, sqlSelect, paramNameSeq, paramNameValuePairs, expression);
+    }
+
     /**
      * <p>
      * 用于生成嵌套 sql

+ 15 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java

@@ -35,7 +35,8 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @since 2018-05-30
  */
 @SuppressWarnings("serial")
-public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdateWrapper<T>> {
+public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdateWrapper<T>>
+    implements Update<LambdaUpdateWrapper<T>, SFunction<T, ?>> {
 
     /**
      * SQL 更新字段内容,例如:name='1',age=2
@@ -63,22 +64,25 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     }
 
     @Override
-    public String getSqlSet() {
-        if (CollectionUtils.isEmpty(sqlSet)) {
-            return null;
+    public LambdaUpdateWrapper<T> set(boolean condition, SFunction<T, ?> column, Object val) {
+        if (condition) {
+            sqlSet.add(String.format("%s=%s", columnToString(column), formatSql("{0}", val)));
         }
-        return String.join(StringPool.COMMA, sqlSet);
+        return typedThis;
     }
 
-    public LambdaUpdateWrapper<T> set(SFunction<T, ?> column, Object val) {
-        return this.set(true, column, val);
+    @Override
+    public LambdaUpdateWrapper<T> setSql(String sql) {
+        sqlSet.add(sql);
+        return typedThis;
     }
 
-    public LambdaUpdateWrapper<T> set(boolean condition, SFunction<T, ?> column, Object val) {
-        if (condition) {
-            sqlSet.add(String.format("%s=%s", columnToString(column), formatSql("{0}", val)));
+    @Override
+    public String getSqlSet() {
+        if (CollectionUtils.isEmpty(sqlSet)) {
+            return null;
         }
-        return typedThis;
+        return String.join(StringPool.COMMA, sqlSet);
     }
 
     @Override

+ 55 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/Update.java

@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011-2020, hubin (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.core.conditions.update;
+
+import java.io.Serializable;
+
+/**
+ * @author miemie
+ * @since 2018-12-12
+ */
+public interface Update<This, R> extends Serializable {
+
+    /**
+     * ignore
+     */
+    default This set(R column, Object val) {
+        return set(true, column, val);
+    }
+
+    /**
+     * 设置 更新 SQL 的 SET 片段
+     *
+     * @param condition 是否加入 set
+     * @param column    字段
+     * @param val       值
+     * @return children
+     */
+    This set(boolean condition, R column, Object val);
+
+    /**
+     * 设置 更新 SQL 的 SET 片段
+     *
+     * @param sql set sql
+     * @return children
+     */
+    This setSql(String sql);
+
+    /**
+     * 获取 更新 SQL 的 SET 片段
+     */
+    String getSqlSet();
+}

+ 11 - 38
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -34,7 +34,8 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @since 2018-05-30
  */
 @SuppressWarnings("serial")
-public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T>> {
+public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T>>
+    implements Update<UpdateWrapper<T>, String> {
 
     /**
      * SQL 更新字段内容,例如:name='1',age=2
@@ -61,15 +62,6 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         this.expression = mergeSegments;
     }
 
-    /**
-     * <p>
-     * 返回一个支持 lambda 函数写法的 wrapper
-     * </p>
-     */
-    public LambdaUpdateWrapper<T> lambda() {
-        return new LambdaUpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, expression);
-    }
-
     @Override
     public String getSqlSet() {
         if (CollectionUtils.isEmpty(sqlSet)) {
@@ -78,27 +70,7 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         return String.join(StringPool.COMMA, sqlSet);
     }
 
-    /**
-     * <p>
-     * SQL SET 字段
-     * </p>
-     *
-     * @param column 字段
-     * @param val    值
-     */
-    public UpdateWrapper<T> set(String column, Object val) {
-        return this.set(true, column, val);
-    }
-
-    /**
-     * <p>
-     * SQL SET 字段
-     * </p>
-     *
-     * @param condition 操作条件
-     * @param column    字段
-     * @param val       值
-     */
+    @Override
     public UpdateWrapper<T> set(boolean condition, String column, Object val) {
         if (condition) {
             sqlSet.add(String.format("%s=%s", column, formatSql("{0}", val)));
@@ -106,13 +78,7 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         return typedThis;
     }
 
-    /**
-     * <p>
-     * SET 部分 SQL
-     * </p>
-     *
-     * @param sql SET 部分内容
-     */
+    @Override
     public UpdateWrapper<T> setSql(String sql) {
         sqlSet.add(sql);
         return typedThis;
@@ -123,6 +89,13 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         return column;
     }
 
+    /**
+     * 返回一个支持 lambda 函数写法的 wrapper
+     */
+    public LambdaUpdateWrapper<T> lambda() {
+        return new LambdaUpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, expression);
+    }
+
     @Override
     protected UpdateWrapper<T> instance(AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs) {
         return new UpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments());