فهرست منبع

setIncrBy和setDecrBy更新

miemie 9 ماه پیش
والد
کامیت
90fa3a4ad1

+ 1 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -27,7 +27,6 @@ import com.baomidou.mybatisplus.core.enums.SqlLike;
 import com.baomidou.mybatisplus.core.toolkit.*;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
-import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape;
 import lombok.Getter;
 
 import java.util.*;
@@ -384,7 +383,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
             }
             if (CollectionUtils.isNotEmpty(columns)) {
                 columns.forEach(c -> appendSqlSegments(ORDER_BY,
-                        columnToSqlSegment(c), mode));
+                    columnToSqlSegment(c), mode));
             }
         });
     }

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

@@ -85,57 +85,26 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
 
     @Override
     public LambdaUpdateWrapper<T> setSql(boolean condition, String setSql, Object... params) {
-        if (condition && StringUtils.isNotBlank(setSql)) {
+        return maybeDo(condition && StringUtils.isNotBlank(setSql), () -> {
             sqlSet.add(formatSqlMaybeWithParam(setSql, params));
-        }
-        return typedThis;
-    }
-
-    /**
-     * 字段自增变量 val 值
-     *
-     * @param column 字段
-     * @param val    变量值 1 字段自增 + 1
-     */
-    public LambdaUpdateWrapper<T> setIncrBy(SFunction<T, ?> column, Number val) {
-        return setIncrBy(true, column, val);
+        });
     }
 
-    /**
-     * 字段自增变量 val 值
-     *
-     * @param condition 是否加入 set
-     * @param column    字段
-     * @param val       变量值 1 字段自增 + 1
-     */
+    @Override
     public LambdaUpdateWrapper<T> setIncrBy(boolean condition, SFunction<T, ?> column, Number val) {
         return maybeDo(condition, () -> {
             String realColumn = columnToString(column);
-            sqlSet.add(realColumn + Constants.EQUALS + realColumn  + Constants.SPACE + Constants.PLUS + Constants.SPACE + (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
+            sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.SPACE + Constants.PLUS + Constants.SPACE +
+                (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
         });
     }
 
-    /**
-     * 字段自减变量 val 值
-     *
-     * @param column 字段
-     * @param val    变量值 1 字段自减 - 1
-     */
-    public LambdaUpdateWrapper<T> setDecrBy(SFunction<T, ?> column, Number val) {
-        return setDecrBy(true, column, val);
-    }
-
-    /**
-     * 字段自减变量 val 值
-     *
-     * @param condition 是否加入 set
-     * @param column    字段
-     * @param val       变量值 1 字段自减 - 1
-     */
+    @Override
     public LambdaUpdateWrapper<T> setDecrBy(boolean condition, SFunction<T, ?> column, Number val) {
         return maybeDo(condition, () -> {
             String realColumn = columnToString(column);
-            sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.SPACE + Constants.DASH + Constants.SPACE + (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
+            sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.SPACE + Constants.DASH + Constants.SPACE +
+                (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
         });
     }
 

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

@@ -94,6 +94,44 @@ public interface Update<Children, R> extends Serializable {
      */
     Children setSql(boolean condition, String setSql, Object... params);
 
+    /**
+     * 字段自增变量 val 值
+     *
+     * @param column 字段
+     * @param val    变量值 1 字段自增 + 1
+     */
+    default Children setIncrBy(R column, Number val) {
+        return setIncrBy(true, column, val);
+    }
+
+    /**
+     * 字段自增变量 val 值
+     *
+     * @param condition 是否加入 set
+     * @param column    字段
+     * @param val       变量值 1 字段自增 + 1
+     */
+    Children setIncrBy(boolean condition, R column, Number val);
+
+    /**
+     * 字段自减变量 val 值
+     *
+     * @param column 字段
+     * @param val    变量值 1 字段自减 - 1
+     */
+    default Children setDecrBy(R column, Number val) {
+        return setIncrBy(true, column, val);
+    }
+
+    /**
+     * 字段自减变量 val 值
+     *
+     * @param condition 是否加入 set
+     * @param column    字段
+     * @param val       变量值 1 字段自减 - 1
+     */
+    Children setDecrBy(boolean condition, R column, Number val);
+
     /**
      * 获取 更新 SQL 的 SET 片段
      */

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

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -108,10 +109,25 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
 
     @Override
     public UpdateWrapper<T> setSql(boolean condition, String setSql, Object... params) {
-        if (condition && StringUtils.isNotBlank(setSql)) {
+        return maybeDo(condition && StringUtils.isNotBlank(setSql), () -> {
             sqlSet.add(formatSqlMaybeWithParam(setSql, params));
-        }
-        return typedThis;
+        });
+    }
+
+    @Override
+    public UpdateWrapper<T> setIncrBy(boolean condition, String column, Number val) {
+        return maybeDo(condition, () -> {
+            sqlSet.add(column + Constants.EQUALS + column + Constants.SPACE + Constants.PLUS + Constants.SPACE +
+                (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
+        });
+    }
+
+    @Override
+    public UpdateWrapper<T> setDecrBy(boolean condition, String column, Number val) {
+        return maybeDo(condition, () -> {
+            sqlSet.add(column + Constants.EQUALS + column + Constants.SPACE + Constants.DASH + Constants.SPACE +
+                (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
+        });
     }
 
     /**

+ 2 - 26
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/update/LambdaUpdateChainWrapper.java

@@ -62,19 +62,6 @@ public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFuncti
         return typedThis;
     }
 
-    /**
-     * 字段自增变量 val 值
-     *
-     * @param column 字段
-     * @param val    值
-     * @return this
-     * @since 3.5.6
-     */
-    public LambdaUpdateChainWrapper<T> setIncrBy(SFunction<T, ?> column, Number val) {
-        wrapperChildren.setIncrBy(column, val);
-        return typedThis;
-    }
-
 
     /**
      * 字段自增变量 val 值
@@ -85,24 +72,12 @@ public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFuncti
      * @return this
      * @since 3.5.6
      */
+    @Override
     public LambdaUpdateChainWrapper<T> setIncrBy(boolean condition, SFunction<T, ?> column, Number val) {
         wrapperChildren.setIncrBy(condition, column, val);
         return typedThis;
     }
 
-    /**
-     * 字段自减变量 val 值
-     *
-     * @param column 字段
-     * @param val    值
-     * @return this
-     * @since 3.5.6
-     */
-    public LambdaUpdateChainWrapper<T> setDecrBy(SFunction<T, ?> column, Number val) {
-        wrapperChildren.setDecrBy(column, val);
-        return typedThis;
-    }
-
     /**
      * 字段自减变量 val 值
      *
@@ -112,6 +87,7 @@ public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFuncti
      * @return this
      * @since 3.5.6
      */
+    @Override
     public LambdaUpdateChainWrapper<T> setDecrBy(boolean condition, SFunction<T, ?> column, Number val) {
         wrapperChildren.setDecrBy(condition, column, val);
         return typedThis;

+ 12 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/update/UpdateChainWrapper.java

@@ -60,6 +60,18 @@ public class UpdateChainWrapper<T> extends AbstractChainWrapper<T, String, Updat
         return typedThis;
     }
 
+    @Override
+    public UpdateChainWrapper<T> setIncrBy(boolean condition, String column, Number val) {
+        wrapperChildren.setIncrBy(condition, column, val);
+        return typedThis;
+    }
+
+    @Override
+    public UpdateChainWrapper<T> setDecrBy(boolean condition, String column, Number val) {
+        wrapperChildren.setDecrBy(condition, column, val);
+        return typedThis;
+    }
+
     @Override
     public String getSqlSet() {
         throw ExceptionUtils.mpe("can not use this method for \"%s\"", "getSqlSet");

+ 10 - 0
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt

@@ -58,6 +58,16 @@ open class KtUpdateChainWrapper<T : Any>(
         return typedThis
     }
 
+    override fun setDecrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateChainWrapper<T> {
+        wrapperChildren.setDecrBy(condition, column, `val`)
+        return typedThis
+    }
+
+    override fun setIncrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateChainWrapper<T> {
+        wrapperChildren.setIncrBy(condition, column, `val`)
+        return typedThis
+    }
+
     override fun getBaseMapper(): BaseMapper<T>? {
         return baseMapper
     }

+ 19 - 5
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateWrapper.kt

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants
 import com.baomidou.mybatisplus.core.toolkit.StringPool
 import com.baomidou.mybatisplus.core.toolkit.StringUtils
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
+import java.math.BigDecimal
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.stream.Collectors.joining
 import kotlin.reflect.KProperty1
@@ -69,17 +70,30 @@ open class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>,
         else sqlSet.stream().collect(joining(StringPool.COMMA))
     }
 
+    override fun set(condition: Boolean, column: KProperty1<in T, *>, value: Any?, mapping: String?): KtUpdateWrapper<T> {
+        return maybeDo(condition) {
+            val sql = formatParam(mapping, value)
+            sqlSet.add(columnsToString(column) + Constants.EQUALS + sql)
+        }
+    }
+
     override fun setSql(condition: Boolean, setSql: String, vararg params: Any): KtUpdateWrapper<T> {
-        if (condition && StringUtils.isNotBlank(setSql)) {
+        return maybeDo(condition && StringUtils.isNotBlank(setSql)) {
             sqlSet.add(formatSqlMaybeWithParam(setSql, *params))
         }
-        return typedThis
     }
 
-    override fun set(condition: Boolean, column: KProperty1<in T, *>, value: Any?, mapping: String?): KtUpdateWrapper<T> {
+    override fun setDecrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateWrapper<T> {
         return maybeDo(condition) {
-            val sql = formatParam(mapping, value)
-            sqlSet.add(columnsToString(column) + Constants.EQUALS + sql)
+            val realColumn = columnToString(column)
+            sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.SPACE + Constants.PLUS + Constants.SPACE + (if (`val` is BigDecimal) `val`.toPlainString() else `val`))
+        }
+    }
+
+    override fun setIncrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateWrapper<T> {
+        return maybeDo(condition) {
+            val realColumn = columnToString(column)
+            sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.SPACE + Constants.DASH + Constants.SPACE + (if (`val` is BigDecimal) `val`.toPlainString() else `val`))
         }
     }