关于Map接收数据库字段操作

MyBatis使用Map接收数据库字段详解
本文详细介绍了如何在MyBatis中使用Map接收数据库查询结果,特别是在只需要部分字段时。通过一个具体的查询例子,展示了如何在mapper和xml层配置SQL,以及在service层如何处理Map类型的返回结果。在处理Map时要注意MyBatis底层会将字段名转换为驼峰式,例如`unit_id`变为`unitId`。在遍历Map列表时,分别获取`unitName`和`num`字段填充到新的JSON数组中,最后将这些数据结构化为一个Map返回。

关于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语句放入数据库中,会返回三个字段,如下图

image-20211009112242110

而现在我们使用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代码

image-20211009112446612

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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值