文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-02 12:53

关注

这篇“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>类型”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯