lambdaQuery()
和lambdaUpdate()
.这两个方法相比LambdaQueryWrapper
和LambdaUpdateWrapper
的好处是可以直接.list获.one,当然他们的功能是差不多的。主要用于构造sql语句的where条件的。
1.lambdaQuery()
的使用方法
lambdaQuery()返回的是一个Wrapper对象
对于复杂条件的查询,使用lambdaUpdate()
进行构建查询。简单的直接用ServiceImpl的get方法就行了。
//select * from tb_user WHERE (username LIKE ? AND status = ? AND balance >= ? AND balance <= ?)
List<User> list = lambdaQuery()
.like(name != null, User::getUsername, name)
.eq(status != null, User::getStatus, status)
.ge(minBalance != null, User::getBalance, minBalance)
.le(maxBalance != null, User::getBalance, maxBalance)
.list();
2.lambdaUpdate()
的使用方法
对于复杂条件的更新,使用lambdaUpdate()
进行构建更新。简单的直接用ServiceImpl的update方法就行了。
@Override
@Transactional
public void deductBalance(Long id, Integer money) {
// 1.查询用户
User user = getById(id);
// 2.校验用户状态
if (user == null || user.getStatus() == 2) {
throw new RuntimeException("用户状态异常!");
}
// 3.校验余额是否充足
if (user.getBalance() < money) {
throw new RuntimeException("用户余额不足!");
}
// 4.扣减余额 update tb_user set balance = balance - ? , status = ? where(id = ?, balance = ?)
int remainBalance = user.getBalance() - money;
lambdaUpdate()
.set(User::getBalance, remainBalance) // 更新余额
.set(remainBalance == 0, User::getStatus, 2) // 动态判断,是否更新status
.eq(User::getId, id)
.eq(User::getBalance, user.getBalance()) // 乐观锁
.update();
}