mybatisplus实现两张表关联分页查询
时间: 2023-10-02 08:12:59 浏览: 208
在MyBatis-Plus中实现两张表的关联分页查询,可以通过以下步骤进行操作:
1. 首先,定义一个包含关联表字段的主表实体类。可以使用注解@TableField来解决关联分区名称不一致的问题。
2. 然后,使用MyBatis-Plus提供的Page对象来创建一个分页查询对象,并指定页码和每页显示的记录数。
3. 接下来,创建一个Wrapper对象用于设置查询条件。可以使用QueryWrapper来构建查询条件。
4. 在Wrapper对象中,使用eq方法设置关联字段的查询条件。
5. 如果需要对结果进行排序,可以使用orderByDesc或orderByAsc方法来设置排序条件。
6. 使用selectPage方法进行分页查询,并获取查询结果的记录列表。
7. 对于每条主表记录,使用Lambda表达式遍历结果列表,创建一个新的Wrapper对象用于查询关联表的数据。
8. 在关联表的Wrapper对象中,使用eq方法设置关联字段的查询条件。
9. 使用selectList方法查询关联表的数据,并将结果存放到主表实体类的某个字段中。
10. 最后,将处理后的主表记录列表收集起来,并返回给调用者。
以下是一个示例代码,演示了如何在MyBatis-Plus中实现两张表的关联分页查询:
```java
Page<Order> page = new Page<>(1, 10);
Wrapper<Order> wrapper = new QueryWrapper<>();
wrapper.eq("o.user_id", userId); // 添加查询条件
wrapper.orderByDesc("o.create_time"); // 添加排序条件
List<Order> orders = orderMapper.selectPage(page, wrapper)
.getRecords()
.stream()
.map(order -> {
QueryWrapper<OrderItem> itemWrapper = new QueryWrapper<>();
itemWrapper.eq("order_id", order.getId());
List<OrderItem> items = orderItemMapper.selectList(itemWrapper);
order.setOrderItems(items);
return order;
})
.collect(Collectors.toList());
```
在上述示例中,我们通过Page对象指定了查询的页码和每页显示的记录数。然后,使用QueryWrapper对象设置了查询条件和排序条件。最后,通过selectPage方法进行分页查询,并使用Lambda表达式遍历查询结果,查询关联表的数据并存放到主表实体类的某个字段中。最终,将处理后的主表记录列表返回给调用者。
阅读全文