mybatis plus实现一对多查询
时间: 2023-10-07 12:14:10 浏览: 95
要使用 MyBatis Plus 实现一对多查询,你可以使用 MyBatis Plus 提供的 `@TableField` 注解和 `@TableName` 注解来定义关联关系。下面是一个示例:
```java
// 定义主表实体类
@TableName("order")
public class Order {
@TableId
private Long id;
private String orderNo;
// 定义关联字段
@TableField(exist = false)
private List<OrderItem> orderItems;
// getter 和 setter 方法
}
// 定义关联表实体类
@TableName("order_item")
public class OrderItem {
@TableId
private Long id;
private Long orderId;
private String productName;
// getter 和 setter 方法
}
```
然后,你可以使用 MyBatis Plus 提供的方法来进行一对多查询。下面是一个示例:
```java
public List<Order> getOrdersWithItems() {
return orderMapper.selectList(new QueryWrapper<Order>().lambda().list().stream()
.map(order -> {
order.setOrderItems(orderItemMapper.selectList(new QueryWrapper<OrderItem>()
.lambda()
.eq(OrderItem::getOrderId, order.getId())));
return order;
})
.collect(Collectors.toList()));
}
```
在这个示例中,我们首先使用 `orderMapper.selectList()` 查询出所有的主表记录,并使用 Java 8 的流式操作进行处理。在流的 `map` 操作中,我们通过 `order.getId()` 获取当前订单的 ID,然后使用 `orderItemMapper.selectList()` 查询关联表的所有记录,并将其设置到 `order` 对象的 `orderItems` 属性中。最后,我们通过 `collect(Collectors.toList())` 方法将结果收集为一个 `List<Order>`。
这样,我们就可以在一对多查询中获取到所有主表记录以及对应的关联表记录。
阅读全文