Mybatis返回map集合时|Mybatis返回map集合时,列的顺序与select不一致问题

目录

  • 返回map集合,列的顺序与select不一致
  • mybatis中返回map集合问题
    • 1.mapper.xml中写一个查询返回map的sql
    • 2.mapper.java 对应接收
    • 3.错误写法
    • 4.正确写法

返回map集合,列的顺序与select不一致

将Hashmap换成LinkedHashMap即可


mybatis中返回map集合问题 关于mybatis返回map集合的操作:
【Mybatis返回map集合时|Mybatis返回map集合时,列的顺序与select不一致问题】
1.mapper.xml中写一个查询返回map的sql
selecthy.uid,hy.area_namefromhua_yang_area AS hyAND hy.area_person > = #{areaPerson}


2.mapper.java 对应接收
注意,这里并不是直接使用Map<>接收,因为sql查出的不是一条数据,而是多条数据,所以是List>接收
/*** mybatis查询接收map集合* @param area* @return*/List findMap(HuaYangArea area);


3.错误写法
错误的写法就是直接读取List中的Map<>
@Overridepublic Map findMap(HuaYangArea entity) {List list = huaYangAreaMapper.findMap(entity); Map res = new HashMap<>(); for (Map stringStringMap : list) {System.out.println(stringStringMap.toString()); stringStringMap.forEach((k,v)->{System.out.println("key:"+k+">>>value:"+v); res.put(k,v); }); }return res; }

这样查询到的结果是:
Mybatis返回map集合时|Mybatis返回map集合时,列的顺序与select不一致问题
文章图片

我们需要看一哈实际List>中到底存储的是什么
Mybatis返回map集合时|Mybatis返回map集合时,列的顺序与select不一致问题
文章图片

结果集中存储是按照{字段名1:字段值1,字段名2:字段值2}
而我们其实期望的是{字段值1:字段值2}

4.正确写法
所以正确的写法应该是
@Overridepublic Map findMap(HuaYangArea entity) {List list = huaYangAreaMapper.findMap(entity); Map res = new HashMap<>(); for (Map stringStringMap : list) {System.out.println(stringStringMap.toString()); String uid = null; String areaName = null; for (Map.Entry entry:stringStringMap.entrySet()){if ("uid".equals(entry.getKey())){uid = entry.getValue(); }else {areaName = entry.getValue(); }}res.put(uid,areaName); }return res; }

返回结果:
Mybatis返回map集合时|Mybatis返回map集合时,列的顺序与select不一致问题
文章图片

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读