关于Map接收数据库字段操作
当需要返回一个类所有的字段的时候,就用类来接受。
当只需要返回一个类的某三四个字段的时候,可以选择使用Map来接收。
代码实操
mapper,xml层
List<Map<String, Object>> queryAlarmUnitTop10(xxx);
<select id="queryAlarmUnitTop10" resultType="java.util.Map">
select
unit_id,unit_name,count(id) as num
from view_alarminfo
<where>
and monitor_time <![CDATA[>=]]> #{minMonitorTime,jdbcType=TIMESTAMP}
and monitor_time <![CDATA[<=]]> #{maxMonitorTime,jdbcType=TIMESTAMP}
and unit_type = '0'
<if test="userType != null and userType != '' and userType!='3'.toString()">
and brigade_id=#{brigadeId,jdbcType=VARCHAR}
</if>
group by unit_id,unit_name
order by num asc
limit 10
</where>
</select>
将上面的sql语句放入数据库中,会返回三个字段,如下图
而现在我们使用Map来接受这个数据,使用debug可以看到如下,这边我们需要好好理解一下,我们使用的是List<Map<String,Object>>来接收的,其中数据库中的每一行都代表着一个list里的map,而每个map里面存贮的是多个<key,value>—这里切记是每个里面存贮多个key和value,可以理解为
map1.put(“unitId”,“123”);
map1.put(“unitName”,“school”);
map1.put(“num”,“4”);
这上面这三个作为一个Map放在List<Map<>>里面
然后继续存贮
map2.put(“unitId”,“456”);
map2.put(“unitName”,“school”);
map2.put(“num”,“22”);
这里还有一个很重要的点,就是数据库里面的字段叫unit_id,但是通过MyBatis底层处理后就变成了unitId,所以后期在service里面处理的时候就
需要list.get(2).get(unitId)
而不是list.get(2).get(unit_id)
具体见下面service代码
service层
List<Map<String, Object>> list = alarmInfoMapper.queryAlarmUnitTop10(brigadeId, startTime, endTime, userType);
JSONArray arrayX = new JSONArray();
JSONArray arrayY = new JSONArray();
for (int i = list.size() - 1; i >= 0; i--) {
arrayX.add(list.get(i).get("unitName"));
arrayY.add(list.get(i).get("num"));
}
Map<String, Object> map = new HashMap<>();
// xData数据
map.put("xData", arrayX);
// yData数据
map.put("yData", arrayY);
return map;
ut(“xData”, arrayX);
// yData数据
map.put(“yData”, arrayY);
return map;