目录
概述
setIncrBy 和 setDecrBy
方法是 MyBatis-Plus 中用于更新操作的高级方法之一,它允许你指定一个字段,并使其在数据库中的值增加指定的数值。这个方法特别适用于需要对数值字段进行增量操作的场景。
使用
应用范围: updateWrapper
setIncrBy 和 setDecrBy 都是 mybatis-plus3.5.6 版本加入的新方法,如果想要使用的话需要导入依赖
springboot3
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.6</version>
</dependency>
springboot2
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.6</version>
</dependency>
示例
setIncrBy
UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
updateWrapper.setIncrBy(Product::getNum, 1);
setDecrBy
UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
updateWrapper.setDecrBy(Product::getNum, 1);
普通 wrapper 和 LambdaUpdateWrapper 使用一样
生成的sql
setIncrBy
-- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同
UPDATE product SET num = num + 1
setDecrBy
-- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同
UPDATE product SET num = num - 1
代码示例
// 根据id获取到用户信息
User userInfoBeforeIncr = this.getById(1);
User userInfoBeforeDecr = this.getById(2);
// 修改前数据输出
System.out.println("修改前用户信息1:\n" + userInfoBeforeIncr);
System.out.println("修改前用户信息2:\n" + userInfoBeforeDecr);
// 创建条件构造器对象
LambdaUpdateWrapper<User> wrapperIncr = new LambdaUpdateWrapper<>();
// 创建条件构造器对象
LambdaUpdateWrapper<User> wrapperDecr = new LambdaUpdateWrapper<>();
// 根据id修改
wrapperIncr.eq(User::getId, 1);
wrapperDecr.eq(User::getId, 2);
// 用户年龄 张三 +3,李四 -3
wrapperIncr.setIncrBy(User::getAge, 3);
wrapperDecr.setDecrBy(User::getAge, 3);
// 修改
this.update(wrapperIncr);
this.update(wrapperDecr);
// 根据id获取到用户信息
User userInfoAfterIncr = this.getById(1);
User userInfoAfterDecr = this.getById(2);
// 修改后数据输出
System.out.println("修改后用户信息1:\n" + userInfoAfterIncr);
System.out.println("修改后用户信息2:\n" + userInfoAfterDecr);
执行以上代码控制台打印信息如下
可以看到:
id为 1 的用户年龄从原先的 32 变为了 35 自增了 3
id为 2 的用户年龄从19 变为 16 自减了 3