mybatisplus的QueryWRapper实现一对多查询
时间: 2023-12-26 10:23:53 浏览: 157
结合mybatis-plus实现简单不需要写sql的多表查询
5星 · 资源好评率100%
在 MyBatis Plus 中,可以使用 QueryWrapper 来实现一对多查询。QueryWrapper 是 MyBatis Plus 提供的一个用于构建查询条件的类。
假设有两个表,一个是主表 User,一个是从表 Order,它们之间是一对多的关系,一个用户可以有多个订单。要实现一对多查询,可以通过 QueryWrapper 的嵌套查询来实现。
首先,需要定义两个实体类 User 和 Order,分别对应数据库中的用户表和订单表。假设 User 实体类中有一个字段为 orders,表示该用户的所有订单,可以使用 @TableField 注解来映射该字段:
```java
public class User {
private Long id;
private String name;
@TableField(exist = false)
private List<Order> orders;
// 省略 getter 和 setter 方法
}
public class Order {
private Long id;
private String orderNo;
private Long userId;
// 省略 getter 和 setter 方法
}
```
然后,可以使用 QueryWrapper 来构建查询条件。在查询条件中,可以通过嵌套查询来实现一对多查询。假设要查询所有用户及其订单,可以使用如下代码:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", 1); // 查询条件,这里假设 status 字段为用户表的状态字段
List<User> userList = userMapper.selectList(queryWrapper);
for (User user : userList) {
QueryWrapper<Order> orderQueryWrapper = new QueryWrapper<>();
orderQueryWrapper.eq("user_id", user.getId()); // 查询条件,这里假设 user_id 字段为订单表的用户ID字段
List<Order> orderList = orderMapper.selectList(orderQueryWrapper);
user.setOrders(orderList);
}
```
以上代码中,首先使用 QueryWrapper 构建查询条件,然后通过 userMapper.selectList 方法查询用户列表。接着,遍历用户列表,根据每个用户的 ID 构建订单表的查询条件,并通过 orderMapper.selectList 方法查询该用户的订单列表。最后,将订单列表设置到用户对象的 orders 字段中。
这样就实现了一对多查询,每个用户对象中的 orders 字段就包含了该用户的所有订单。
阅读全文