lambdaquery group by 查询count(*)
时间: 2025-03-27 14:01:34 浏览: 41
### 使用 LambdaQuery 进行 `GROUP BY` 统计查询
在 MyBatis Plus 中,可以利用 `LambdaQueryWrapper` 来构建更加简洁和类型的查询条件。对于需要进行分组统计的操作,比如计算特定条件下记录的数量 (`COUNT(*)`) ,可以通过如下方式实现:
```java
// 创建一个用于封装查询条件的对象
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
// 设置分组依据以及要统计的内容
wrapper.groupBy(User::getDepartment);
// 执行聚合查询并获取结果列表
List<Object[]> result = userMapper.selectObjs(wrapper);
```
为了更精确地展示如何完成带有 `COUNT(*)` 的 `GROUP BY` 查询,下面提供了一个具体的例子,假设有一个名为 `User` 的实体类,并希望按部门名称(`department`)来统计数据条目数:
```java
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Select;
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT department, COUNT(*) as num FROM user GROUP BY department")
List<Map<String, Object>> selectCountGroupByDept();
}
// 或者不使用@Select注解的方式,在service层调用selectMaps方法
public class UserService {
private final UserMapper userMapper;
public Map<String, Integer> getDeptUserCounts() {
// 构建查询器实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 添加分组逻辑
queryWrapper.groupBy(User::getDepartment).select(User::getDepartment, (Wrappers.<User>lambdaQuery()).count());
// 获取映射后的结果集
List<Map<String, Object>> list = userMapper.selectMaps(queryWrapper);
// 将结果转换成易于使用的Map结构
return list.stream().collect(Collectors.toMap(
map -> String.valueOf(map.get("department")),
map -> ((Number)map.get("num")).intValue()
));
}
}
```
上述代码展示了两种不同的实现思路:一种是通过自定义 SQL 语句配合接口中的 `@Select` 注解;另一种则是完全依赖于 MyBatis Plus 提供的方法链式编程风格[^1]。
阅读全文
相关推荐
















