-- 创造无限可能

java spring mybatis plus 分组统计

2023-05-05 02:05:41
1405 人浏览 16 人点赞
有用,点赞支持一下

使用 groupBy()select() 方法。假设我们有一个 Order 实体类,其中包含一个状态属性 status 和一个价格属性 price,我们需要按照状态进行分组,统计每个状态的订单数量和总价格,可以使用以下代码:

QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("status", "count(*) as count", "sum(price) as total_price") // 选择需要统计的字段
       .groupBy("status"); // 按照状态分组

List<Map<String, Object>> orderStats = orderMapper.selectMaps(wrapper);

System.out.println(orderStats);

这里使用 selectMaps() 方法将查询结果转换为一个 Map 列表,其中每个 Map 包含状态、订单数量和总价格三个键值对。其中 count(*)sum(price) 是 SQL 中的聚合操作,这里可以在 select 语句中直接使用别名 as countas total_price 指定结果集中的字段名。

注意,查询结果中键值对的顺序与 select() 方法中指定字段的顺序一致。如果你需要更改顺序,可以使用 SQL 中的 as 关键字来指定别名。

除了使用 selectMaps() 方法,你还可以使用 selectObjs() 方法获取查询结果中的单个属性,或使用 selectList() 方法获取一个实体对象列表。