setIncrBy和setDecrBy更新

This commit is contained in:
miemie 2024-08-08 17:04:12 +08:00
parent 90fa3a4ad1
commit cd42c65853
6 changed files with 80 additions and 137 deletions

View File

@ -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));
});
}

View File

@ -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);
}
/**

View File

@ -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));
});
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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> {
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`))
}
}
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`))
sqlSet.add(String.format("%s=%s + %s", realColumn, realColumn, if (`val` is BigDecimal) `val`.toPlainString() else `val`))
}
}
override fun setDecrBy(condition: Boolean, column: KProperty1<in T, *>, `val`: Number): KtUpdateWrapper<T> {
return maybeDo(condition) {
val realColumn = columnToString(column)
sqlSet.add(String.format("%s=%s - %s", realColumn, realColumn, if (`val` is BigDecimal) `val`.toPlainString() else `val`));
}
}