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>
|
在数据库中的查询结果如下
应该如何为其对应的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; // 数据列表
}
|