Map集合的一种使用情况

Map集合的一种使用情况

现有一段SQL查询语句,如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<select id="countEmpJobData" resultType="java.util.Map">
    select
        ( case when job=1 then '班主任'
               when job=2 then '讲师'
               when job=3 then '学工主管'
               when job=4 then '教研主管'
               when job=5 then '咨询师'
               else '其他' end) pos,
        count(*) num
    from emp group by job order by num
</select>

在数据库中的查询结果如下

image-20250912234232459

应该如何为其对应的Java类设计接收类型?用Map集合是其中一种解决方式

1
List<Map<String, Object>> countEmpJobData();

前端期望接收格式如下,应该如何设计Service实现类呢?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
"jobList": [
    "教研主管",
    "其他",
    "学工主管",
    "班主任",
    "咨询师",
    "讲师"
],
"dataList": [
    1,
    1,
    2,
    6,
    8,
    14
]

下方代码是一种实现方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Service
public class ReportServiceImpl implements ReportService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public JobOption getEmpJobData() {
        // 调用mapper接口,获取统计数据
        /*
         * 返回结果示例:
         * list = [
         *   {pos=教研主管, num=1},
         *   {pos=其他, num=1},
         *   {pos=学工主管, num=2},
         *    ……
         * ]
         */
        List<Map<String, Object>> list = empMapper.countEmpJobData();
        // 封装结果并返回
        List<Object> jobList = list.stream().map(dataMap ->
                dataMap.get("pos")).toList();
        List<Object> dataList = list.stream().map(dataMap ->
                dataMap.get("num")).toList();
        return new JobOption(jobList, dataList);
    }
}

其中的JobOption实体类如下

1
2
3
4
5
6
7
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JobOption {
    private List jobList; // 职位列表
    private List dataList; // 数据列表
}
本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计