mybatis-plus-join 多表联查修改字段
时间: 2023-07-25 13:05:22 浏览: 161
支持连表查询的mybatis-plus
5星 · 资源好评率100%
在 Mybatis-Plus 中进行多表联查时,可以使用 `@TableField` 注解指定要查询的字段,并在实体类中定义对应的属性。
假设我们有两张表:`user` 表和 `order` 表,它们的关系是一对多,一个用户可以拥有多个订单。现在我们需要查询用户的信息和他的订单总数,然后将订单总数更新到用户表中的一个字段中。
首先,定义一个实体类 `User`,并在其中添加一个属性 `orderCount`,用来存储订单总数:
```
@Data
public class User {
private Long id;
private String name;
private Integer age;
@TableField(exist = false)
private Integer orderCount; // 订单总数
}
```
其中,`@TableField(exist = false)` 表示该属性不是数据库表中的字段。
然后,使用 Mybatis-Plus 提供的 `Wrapper` 类进行多表联查,并计算订单总数:
```
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*, COUNT(order.id) as order_count")
.eq("user.id", userId)
.leftJoin("order", "user.id=order.user_id")
.groupBy("user.id");
User user = userMapper.selectOne(wrapper);
if (user != null) {
user.setOrderCount(orderCount);
userMapper.updateById(user);
}
```
在 `wrapper.select()` 方法中,我们使用了 SQL 的聚合函数 `COUNT()` 来计算订单总数,并使用 `as` 关键字给计算结果取了一个别名 `order_count`。然后,在 `wrapper.leftJoin()` 方法中,指定了要联查的表和联查条件。最后,在 `wrapper.groupBy()` 方法中,指定了分组条件。
查询出用户信息后,将订单总数设置到 `User` 对象中,并使用 `userMapper.updateById()` 方法将修改后的数据更新到数据库中。
以上就是使用 Mybatis-Plus 进行多表联查并修改字段的方法。注意,这里的 `orderCount` 属性不是数据库表中的字段,因此需要使用 `@TableField(exist = false)` 注解标识。
阅读全文