支持一下自增自减使用BigDecimal的少数情况.
https://github.com/baomidou/mybatis-plus/issues/6061
This commit is contained in:
parent
40aac96745
commit
a8c4e912f9
@ -8,4 +8,6 @@ dependencies {
|
||||
implementation "${lib.'imadcn'}"
|
||||
implementation "${lib.'mybatis-ehcache'}"
|
||||
implementation "${lib.'mybatis-redis'}"
|
||||
|
||||
testImplementation "${lib.'logback-classic'}"
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -110,7 +111,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.PLUS + val);
|
||||
sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.PLUS + (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
|
||||
});
|
||||
}
|
||||
|
||||
@ -134,7 +135,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.DASH + val);
|
||||
sqlSet.add(realColumn + Constants.EQUALS + realColumn + Constants.DASH + (val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : val));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,8 @@ 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
|
||||
@ -51,6 +53,68 @@ class LambdaUpdateWrapperTest extends BaseWrapperTest {
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user