瀏覽代碼

调整字段自增自减.

nieqiurong 1 年之前
父節點
當前提交
524cc7a399

+ 1 - 1
changelog-temp.md

@@ -12,7 +12,7 @@
 - feat: 重构生成器TemplateConfig配置,模板禁用与路径配置更改至对应具体实现之上
 - feat: 支持组合注解
 - feat: 升级spring-cloud-commons
-- feat: 新增 LambdaUpdateWrapper 字段自增 setSelfIncr 自减 setSelfDecr 方法
+- feat: 新增 LambdaUpdateWrapper 字段自增 setIncrBy 自减 setDecrBy 方法
 - feat: 增加CI
 - feat: 获取注入方法时传递org.apache.ibatis.session.Configuration
 - feat: 新增自增主键兼容配置开关(mybatis-plus.global-config.db-config.insert-ignore-auto-increment-column 默认false,开启INSERT语句无视主键字段生成)

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

@@ -90,6 +90,16 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
         return typedThis;
     }
 
+    /**
+     * 字段自增变量 val 值
+     *
+     * @param column 字段
+     * @param val    变量值 1 字段自增 + 1
+     */
+    public LambdaUpdateWrapper<T> setIncrBy(SFunction<T, ?> column, Number val) {
+        return setIncrBy(true, column, val);
+    }
+
     /**
      * 字段自增变量 val 值
      *
@@ -97,13 +107,23 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
      * @param column    字段
      * @param val       变量值 1 字段自增 + 1
      */
-    public LambdaUpdateWrapper<T> setSelfIncr(boolean condition, SFunction<T, ?> column, Object val) {
+    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.PLUS + val);
         });
     }
 
+    /**
+     * 字段自减变量 val 值
+     *
+     * @param column 字段
+     * @param val    变量值 1 字段自减 - 1
+     */
+    public LambdaUpdateWrapper<T> setDecrBy(SFunction<T, ?> column, Number val) {
+        return setDecrBy(true, column, val);
+    }
+
     /**
      * 字段自减变量 val 值
      *
@@ -111,7 +131,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
      * @param column    字段
      * @param val       变量值 1 字段自减 - 1
      */
-    public LambdaUpdateWrapper<T> setSelfDecr(boolean condition, SFunction<T, ?> column, Object val) {
+    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.DASH + val);

+ 27 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/LambdaUpdateWrapperTest.java

@@ -23,9 +23,34 @@ class LambdaUpdateWrapperTest extends BaseWrapperTest {
     }
 
     @Test
-    void test() {
+    void testIncrByAndDecrBy() {
         LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.setSelfIncr(true, User::getRoleId, 1).setSelfDecr(true, User::getName, 1).eq(User::getId, 1);
+        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());
     }
+
 }

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

@@ -56,13 +56,58 @@ public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T, SFuncti
         return typedThis;
     }
 
-    public LambdaUpdateChainWrapper<T> setSelfIncr(boolean condition, SFunction<T, ?> column, Object val) {
-        wrapperChildren.setSelfIncr(condition, column, val);
+    /**
+     * 字段自增变量 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;
     }
 
-    public LambdaUpdateChainWrapper<T> setSelfDecr(boolean condition, SFunction<T, ?> column, Object val) {
-        wrapperChildren.setSelfDecr(condition, column, val);
+
+    /**
+     * 字段自增变量 val 值
+     *
+     * @param condition 条件
+     * @param column    字段
+     * @param val       值
+     * @return this
+     * @since 3.5.6
+     */
+    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 值
+     *
+     * @param condition 条件
+     * @param column    字段
+     * @param val       值
+     * @return this
+     * @since 3.5.6
+     */
+    public LambdaUpdateChainWrapper<T> setDecrBy(boolean condition, SFunction<T, ?> column, Number val) {
+        wrapperChildren.setDecrBy(condition, column, val);
         return typedThis;
     }