mybatis plus分组统计数量
时间: 2025-01-04 21:14:17 浏览: 11
### 使用 MyBatis Plus 进行分组统计数量
为了实现分组统计数据的功能,可以利用 `Wrapper` 来构建查询条件,并通过调用 `selectMaps` 或者自定义 SQL 实现复杂查询。下面是一个具体的例子来展示如何使用 MyBatis Plus 对学生表按班级进行分组并统计每班的学生人数。
#### 创建 Mapper 接口
首先创建一个继承于 `BaseMapper<T>` 的接口用于操作数据库中的记录:
```java
package com.example.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.Student;
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}
```
#### 编写 Service 方法
接着编写服务层逻辑,在这里可以通过封装好的方法完成分页、排序等功能;对于复杂的聚合查询,则需借助 LambdaQueryWrapper 构建动态SQL语句:
```java
package com.example.demo.service.impl;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.mapper.StudentMapper;
import com.example.demo.entity.Student;
import com.example.demo.service.IStudentService;
@Service
@RequiredArgsConstructor
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student>
implements IStudentService {
private final StudentMapper studentMapper;
/**
* 获取各班级学生的总数.
*/
public List<Map<String, Object>> getStudentCountByClass() {
return studentMapper.selectMaps(
Wrappers.<Student>lambdaQuery()
.groupBy(Student::getClassName)
.select(Student::getClassName,
SqlFunc.COUNT(Student::getId).as("student_count"))
);
}
}
```
上述代码片段展示了如何基于 MyBatis Plus 和 Lambda 表达式的组合来进行分组统计[^1]。注意这里的 `SqlFunc.COUNT()` 是用来计算特定字段的数量,而 `.as("alias")` 则指定了返回结果集中该列的别名以便后续处理。
此外还可以直接在 XML 文件内定义更灵活多变的 SQL 查询语句,适用于更加复杂的业务场景需求。
阅读全文