mybatisplus 实现mapper中 多表查询数据分页
时间: 2023-07-07 12:08:54 浏览: 85
Mybatis-Plus提供了非常方便的多表查询分页的方法,可以通过Wrapper构造器实现。
假设我们有两个表t_user和t_order,t_user中有user_id和username两个字段,t_order中有order_id和user_id两个字段,我们需要查询t_user中username包含"张三"、t_order中user_id为1的订单,并且按照order_id排序。可以通过如下代码实现:
```java
// 创建分页对象
IPage<Order> page = new Page<>(1, 10);
// 构造查询条件
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", 1)
.orderByAsc("order_id");
// 执行查询
List<Order> orders = orderMapper.selectPage(page, queryWrapper).getRecords();
```
如果需要关联查询t_user表中的用户信息,可以使用左连接关联查询,如下:
```java
// 创建分页对象
IPage<OrderVo> page = new Page<>(1, 10);
// 构造查询条件
QueryWrapper<OrderVo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("o.user_id", 1)
.like("u.username", "张三%")
.orderByAsc("o.order_id");
// 执行查询
List<OrderVo> orderVos = orderMapper.selectOrderVoPage(page, queryWrapper);
```
其中,OrderVo是一个自定义的实体类,用于接收关联查询的结果,可以通过@TableName指定对应的表名,@TableField指定对应的字段名。同时,需要在OrderMapper中定义selectOrderVoPage方法,实现关联查询,如下:
```java
List<OrderVo> selectOrderVoPage(IPage<OrderVo> page, @Param(Constants.WRAPPER) Wrapper<OrderVo> wrapper);
```
需要注意的是,OrderVo中的字段名需要与查询条件中的别名一致,否则查询结果会为null。
阅读全文