mybatisPlus groupby
时间: 2023-07-30 12:10:19 浏览: 297
MybatisPlus 提供了两种方式进行分组查询:
1. 使用 QueryWrapper 类的 groupBy 方法
使用 QueryWrapper 类的 groupBy 方法可以实现简单的分组查询,例如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age, count(*) as count");
wrapper.groupBy("age");
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
```
以上代码中的 `select` 方法指定了要查询的字段,`count(*) as count` 表示对每组数据进行计数,将计数结果存储在 `count` 字段中。`groupBy` 方法指定了按照 `age` 字段进行分组。最后使用 `selectMaps` 方法查询数据,并将结果存储在一个 `List<Map<String, Object>>` 中,每个 Map 存储一组数据的统计结果。
2. 使用 @TableField 注解的 exist 属性
MybatisPlus 还可以使用实体类的 @TableField 注解的 exist 属性进行分组查询,例如:
```java
public class User {
private Long id;
private String name;
private Integer age;
@TableField(exist = false)
private Integer count;
// getter/setter 略
}
```
以上代码中的 `@TableField(exist = false)` 表示该字段在数据库中不存在,是一个虚拟字段。在查询时可以使用该字段进行分组统计,例如:
```java
List<User> list = userMapper.selectList(
new QueryWrapper<User>()
.select("age, count(*) as count")
.groupBy("age")
);
for (User user : list) {
System.out.println(user.getAge() + "岁的用户有" + user.getCount() + "个");
}
```
以上代码中,使用了 select 方法指定要查询的字段,count(*) as count 表示对每组数据进行计数,将计数结果存储在 count 字段中。最后使用 groupBy 方法指定按照 age 字段进行分组查询,并将结果存储在实体类 User 的 count 属性中。最后输出每组数据的统计结果。
阅读全文