mybatisplusjoin写一个按条件修改的
时间: 2023-10-19 20:26:14 浏览: 54
mybaitisplus修改
好的,这里给你一个使用mybatis-plus的LambdaQueryWrapper和LambdaUpdateWrapper实现多表关联查询并按条件修改的示例。
假设我们有两个实体类User和Order,它们之间存在一对多的关系,即一个用户可以拥有多个订单。现在我们要按条件修改所有订单的状态为已完成。
首先,我们需要构造一个LambdaQueryWrapper对象,指定查询条件为用户的年龄大于18岁:
```
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getAge, 18);
```
接下来,我们使用mybatis-plus的selectList()方法查询出符合条件的用户列表,并将其关联到Order表上:
```
List<User> userList = userMapper.selectList(queryWrapper);
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(Order::getUserId, userList.stream().map(User::getId).collect(Collectors.toList()));
updateWrapper.set(Order::getStatus, "已完成");
```
以上代码中,我们使用LambdaUpdateWrapper构造了一个更新条件,其中in()方法表示筛选出所有UserId在userList中的订单,将其状态设置为"已完成"。最后,我们使用mybatis-plus的update()方法执行更新操作:
```
orderMapper.update(null, updateWrapper);
```
完整的代码示例如下:
```
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getAge, 18);
List<User> userList = userMapper.selectList(queryWrapper);
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(Order::getUserId, userList.stream().map(User::getId).collect(Collectors.toList()));
updateWrapper.set(Order::getStatus, "已完成");
orderMapper.update(null, updateWrapper);
```
希望这个示例对你有所帮助。
阅读全文