mybatis-plus-join 分组count
时间: 2025-01-25 15:54:20 浏览: 51
### MyBatis Plus JOIN 分组 Count 查询示例
在处理复杂查询需求时,MyBatis-Plus Join (MPJ) 提供了一种简洁的方式来进行关联表的操作。对于分组统计的需求,可以利用 MPJ 的功能来实现高效的 `COUNT` 统计。
#### 实现分组 COUNT 查询
为了完成基于 JOIN 的分组统计查询,在实体类定义好相应的字段之后,可以通过编写服务层逻辑来调用 MPJ 提供的方法:
```java
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class OrderService extends ServiceImpl<OrderMapper, Order> {
public List<Map<String, Object>> getOrderCountByStatus() {
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
// 使用 Wrapper 进行条件构建
return orderMapper.selectMaps(
Wrappers.<Order>lambdaQuery()
.select(Order::getStatus, SqlFunc.COUNT)
.groupBy(Order::getStatus));
}
}
```
上述代码展示了如何通过 `LambdaQueryWrapper` 和 `selectMaps` 方法结合 SQL 函数进行简单的分组统计[^1]。
当涉及到多表联查并执行更复杂的聚合操作时,则需借助于 MPJ 扩展包所提供的能力。下面是一个更加完整的例子,展示如何联合两个表并对结果集按某个字段进行分组统计:
```java
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import mpj.demo.mapper.OrderItemMapper;
import mpj.demo.mapper.OrderMapper;
import mpj.demo.pojo.entity.Order;
import mpj.demo.pojo.vo.OrderVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ComplexJoinService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
/**
* 联合订单表和订单项表,并按照状态分组计算数量.
*/
public Page<OrderVO> listOrdersWithItemCount(Page page){
return orderMapper.listOrdersWithItems(page,
Wrappers.lambdaQuery().eq(Order::getDeleted, false),
"order.status",
"count(order_item.id)"
);
}
}
```
此段代码中,`listOrdersWithItemCount` 方法实现了对订单及其子项的联合查询,并依据订单的状态进行了分组统计。这里假设存在自定义 Mapper 接口中的方法用于支持这种类型的查询[^2]。
阅读全文
相关推荐


















