setIncrBy和setDecrBy更新
This commit is contained in:
parent
90fa3a4ad1
commit
cd42c65853
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
@ -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`));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user