mybatis查询返回Map<String,Object>类型的讲解

 更新时间:2022年6月27日 15:32  点击:829 作者:菜鸟笔记

查询返回Map<String,Object>类型

mybatis 查询返回Map<String,Object> 类型,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题。

Mapper.java中的方法:

@MapKey("userId")
Map<String,UserInfo> personalInfoByUserIds(List<String> list);

mapper.xml文件中的配置:

<resultMap id="BaseResultMap" type="com.*.*.entity.UserInfo">
    <id column="user_id" jdbcType="VARCHAR" property="userId" />
    <result column="user_code" jdbcType="INTEGER" property="userCode" />
    <result column="user_name" jdbcType="VARCHAR" property="userName" />
    <result column="user_gender" jdbcType="INTEGER" property="userGender" />
    <result column="mobile_phone" jdbcType="VARCHAR" property="mobilePhone" />
    <result column="birthday" jdbcType="DATE" property="birthday" />
  </resultMap>
 
<select id="personalInfoByUserIds" resultMap="BaseResultMap">
      select * from t_user_info i where i.user_id in
      <foreach collection="list" item="item" separator="," open="(" close=")" index="index">
        #{item}
      </foreach>
</select>

返回结果如下:

mybatis返回结果为Map问题

表:members 中的gender 列是这样:

Female
Female
Male
Female
Male
Male
Male
Male
Male

现在我们想统计 members 中男女人数分别是多少,很显然返回的结果应该是这样的:

Femal: 3

Male: 6

对应的xml文件中的查询语句:

<select id="genderCount" resultMap="genderCount">
    select
        gender,
        count(gender) count
    from members
    group by gender
  </select>

<resultMap id="genderCount" type="java.util.HashMap">
    <result column="gender" property="key" javaType="java.lang.String"/>
    <result column="count" property="value" javaType="java.lang.Integer"/>
</resultMap>

问题一: 按照常规想法,mybatis 返回的结果应该是 map 对象,并且里面包含两个 entry。

所以,对应的 mapper 接口应该是这样的子的:

Map<String, Integer> getGenderCount();

但这样定义接口会异常,大概的意思是:查询结果要么是 null,要么是只有一个,而现在却出现多个结果。

这样的报错信息很明显了,mapper 接口应该定义成:

List<Map<String, Integer>> getGenderCount();

xml 文件中的查询结果是个 list,这个 list 中包含两个 map 对象,每一个 map 对象中只包含一个entry。

(好像使用 resultHandler 可以让xml中查询的返回结果为 map 对象中包含两个 entry 这种形式)

问题二: list 中有两个map,那每个 map 中的 entry 是什么呢? 同样是按照常规想法,两个map 中应该分别应该是:{Femal:3},{Male: 6}。但实际的返回结果是:

[
map1:{
    key:Femal,
    value: 3
}
map2:{
    key:Male,
    value: 6
}
]

所以需要转换成我们期望的类型。

在这个demo中,需要将 mapper 接口定义成这样子。

List<Map<String, Object>> getGenderCount();

因为 value 的类型能是 String 可能是 Integer。

对xml查询的 List<Map<String, Object>> 结果做转化,代码如下:

private Map<String, Integer> getMetricsLatestVersion(
      List<Map<String, Object>> genderCountList) {

    Map<String, Integer> genderCount = new HashMap<>();
    for (Map<String, Object> kv : genderCountList) {
      String key = null;
      Integer value = null;

      for (Map.Entry<String, Object> entry : kv.entrySet()) {
        if (entry.getKey().equals("key")) {
          key = (String) entry.getValue();
        } else {
          value = (Integer) entry.getValue();
        }
      }
      genderCount.put(key, value);
    }
    return genderCount;
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。

原文出处:https://xingfeiyin.blog.csdn.net/article/details/123738647

[!--infotagslink--]

相关文章

  • Java8 实现stream将对象集合list中抽取属性集合转化为map或list

    这篇文章主要介绍了Java8 实现stream将对象集合list中抽取属性集合转化为map或list的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • mybatis的Configuration详解

    这篇文章主要介绍了mybatis的Configuration详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
  • mybatis 返回Integer,Double,String等类型的数据操作

    这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25
  • VBS中FileSystemObject对象详解(完整版)

    今天在脚本之家看了几篇关于vbs FileSystemObject的一些资料,发现不够详细与完整这里刚好发现了一篇更好的文章特整理一下,需要的朋友可以参考下...2020-06-30
  • 浅谈C++中的string 类型占几个字节

    本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
  • MyBatis-Plus的物理删除和逻辑删除(使用场景)

    数据库中的数据删除会分为两种:物理删除 和 逻辑删除,接下来通过本文给大家介绍MyBatis-Plus的物理删除和逻辑删除使用场景分析,感兴趣的朋友一起看看吧...2021-09-25
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • js如何打印object对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
  • Mybatis执行update失败的解决

    这篇文章主要介绍了Mybatis执行update失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • Mybatis plus中使用in查询出错如何解决

    这篇文章主要介绍了Mybatis plus中使用in查询出错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-06
  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23
  • mybatis-plus雪花算法自动生成机器id原理及源码

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析...2021-06-04
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • C++如何删除map容器中指定值的元素详解

    map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
  • Mybatis用注解写in查询的实现

    这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13