返回顶部
首页 > 资讯 > 精选 >mybatis如何查询返回Map<String,Object>类型
  • 536
分享到

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

2023-07-02 12:07:46 536人浏览 八月长安
摘要

这篇“mybatis如何查询返回Map<String,Object>类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看

这篇“mybatis如何查询返回Map<String,Object>类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis如何查询返回Map<String,Object>类型”文章吧。

查询返回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<String,Object>类型

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;  }

以上就是关于“mybatis如何查询返回Map<String,Object>类型”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: mybatis如何查询返回Map<String,Object>类型

本文链接: https://lsjlt.com/news/342094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作