Bladeren bron

setIncrBy和setDecrBy更新

miemie 10 maanden geleden
bovenliggende
commit
cd42c65853

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

@@ -94,8 +94,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     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(String.format("%s=%s + %s", realColumn, realColumn, val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
         });
     }
 
@@ -103,8 +102,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     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(String.format("%s=%s - %s", realColumn, realColumn, val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
         });
     }
 

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

@@ -120,7 +120,7 @@ public interface Update<Children, R> extends Serializable {
      * @param val    变量值 1 字段自减 - 1
      */
     default Children setDecrBy(R column, Number val) {
-        return setIncrBy(true, column, val);
+        return setDecrBy(true, column, val);
     }
 
     /**

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

@@ -117,16 +117,14 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
     @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));
+            sqlSet.add(String.format("%s=%s + %s", column, column, 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));
+            sqlSet.add(String.format("%s=%s - %s", column, column, val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
         });
     }
 

+ 0 - 120
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/LambdaUpdateWrapperTest.java

@@ -1,120 +0,0 @@
-package com.baomidou.mybatisplus.core.conditions;
-
-import com.baomidou.mybatisplus.core.MybatisConfiguration;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
-import com.baomidou.mybatisplus.test.User;
-import org.apache.ibatis.builder.MapperBuilderAssistant;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-
-import java.math.BigDecimal;
-
-/**
- * @author miemie
- * @since 2021-01-27
- */
-class LambdaUpdateWrapperTest extends BaseWrapperTest {
-
-    @BeforeAll
-    static void initUser() {
-        TableInfo tableInfo = TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), User.class);
-        Assertions.assertEquals("sys_user", tableInfo.getTableName());
-    }
-
-    @Test
-    void testIncrByAndDecrBy() {
-        LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(true, User::getRoleId, 1).setDecrBy(true, User::getName, 1).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1,username=username - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, 1).setIncrBy(User::getName, 1).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1,username=username + 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(false, User::getRoleId, 1).setIncrBy(User::getName, 1).eq(User::getId, 1);
-        Assertions.assertEquals("username=username + 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, 1).setDecrBy(User::getName, 1).eq(false, User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1,username=username - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(true, User::getRoleId, 1).setDecrBy(true, User::getName, 1).eq(false, User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1,username=username - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(false, User::getRoleId, 1).setDecrBy(User::getName, 1).eq(User::getId, 1);
-        Assertions.assertEquals("username=username - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, 1).setDecrBy(false, User::getName, 1).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1", wrapper.getSqlSet());
-
-
-    }
-
-    @Test
-    void testIncrByAndDecrByBigDecimal() {
-        var wrapper = new LambdaUpdateWrapper<User>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal("1")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal(1)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal(1.0000)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal("1.0000")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 1.0000", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal(0.01)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - " + new BigDecimal(0.01), wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal("0.01")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 0.01", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setDecrBy(User::getRoleId, new BigDecimal("2340").setScale(-1)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id - 2340", wrapper.getSqlSet());
-
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal("1")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal(1)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal(1.0000)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal("1.0000")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 1.0000", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal(0.01)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + " + new BigDecimal(0.01), wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal("0.01")).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 0.01", wrapper.getSqlSet());
-
-        wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setIncrBy(User::getRoleId, new BigDecimal("2340").setScale(-1)).eq(User::getId, 1);
-        Assertions.assertEquals("role_id=role_id + 2340", wrapper.getSqlSet());
-    }
-
-}

+ 67 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/UpdateWrapperIncrDecrTest.java

@@ -0,0 +1,67 @@
+package com.baomidou.mybatisplus.core.conditions;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.Update;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.test.User;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.math.BigDecimal;
+
+/**
+ * @author miemie
+ * @since 2021-01-27
+ */
+class UpdateWrapperIncrDecrTest extends BaseWrapperTest {
+
+    @BeforeAll
+    static void initUser() {
+        TableInfo tableInfo = TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), User.class);
+        Assertions.assertEquals("sys_user", tableInfo.getTableName());
+    }
+
+    @Test
+    void testIncrByAndDecrBy() {
+        assertEquals(new UpdateWrapper<User>()
+                .setIncrBy("role_id", 1).setDecrBy("username", 1),
+            "role_id=role_id + 1,username=username - 1");
+
+        assertEquals(new LambdaUpdateWrapper<User>()
+                .setIncrBy(User::getRoleId, 1).setDecrBy(User::getName, 1),
+            "role_id=role_id + 1,username=username - 1");
+    }
+
+    @Test
+    void testIncrByAndDecrByBigDecimal() {
+        assertEquals(new LambdaUpdateWrapper<User>()
+                .setIncrBy(User::getRoleId, new BigDecimal("1"))
+                .setIncrBy(User::getRoleId, new BigDecimal(1))
+                .setIncrBy(User::getRoleId, new BigDecimal(1.0000))
+                .setIncrBy(User::getRoleId, new BigDecimal("1.0000"))
+                .setIncrBy(User::getRoleId, new BigDecimal("0.01"))
+                .setIncrBy(User::getRoleId, new BigDecimal("2340")),
+            "role_id=role_id + 1,role_id=role_id + 1,role_id=role_id + 1," +
+                "role_id=role_id + 1.0000,role_id=role_id + 0.01,role_id=role_id + 2340");
+
+        assertEquals(new LambdaUpdateWrapper<User>()
+                .setDecrBy(User::getRoleId, new BigDecimal("1"))
+                .setDecrBy(User::getRoleId, new BigDecimal(1))
+                .setDecrBy(User::getRoleId, new BigDecimal(1.0000))
+                .setDecrBy(User::getRoleId, new BigDecimal("1.0000"))
+                .setDecrBy(User::getRoleId, new BigDecimal("0.01"))
+                .setDecrBy(User::getRoleId, new BigDecimal("2340")),
+            "role_id=role_id - 1,role_id=role_id - 1,role_id=role_id - 1," +
+                "role_id=role_id - 1.0000,role_id=role_id - 0.01,role_id=role_id - 2340");
+    }
+
+
+    private void assertEquals(Update<?, ?> update, String sql) {
+        Assertions.assertEquals(sql, update.getSqlSet());
+    }
+}

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

@@ -83,17 +83,17 @@ open class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>,
         }
     }
 
-    override fun setDecrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateWrapper<T> {
+    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.PLUS + Constants.SPACE + (if (`val` is BigDecimal) `val`.toPlainString() else `val`))
+            sqlSet.add(String.format("%s=%s + %s", realColumn, realColumn, if (`val` is BigDecimal) `val`.toPlainString() else `val`))
         }
     }
 
-    override fun setIncrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateWrapper<T> {
+    override fun setDecrBy(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`))
+            sqlSet.add(String.format("%s=%s - %s", realColumn, realColumn, if (`val` is BigDecimal) `val`.toPlainString() else `val`));
         }
     }