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问题
表: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
相关文章
Java8 实现stream将对象集合list中抽取属性集合转化为map或list
这篇文章主要介绍了Java8 实现stream将对象集合list中抽取属性集合转化为map或list的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05- 这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
- 这篇文章主要介绍了mybatis的Configuration详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
mybatis 返回Integer,Double,String等类型的数据操作
这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25- 今天在脚本之家看了几篇关于vbs FileSystemObject的一些资料,发现不够详细与完整这里刚好发现了一篇更好的文章特整理一下,需要的朋友可以参考下...2020-06-30
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 数据库中的数据删除会分为两种:物理删除 和 逻辑删除,接下来通过本文给大家介绍MyBatis-Plus的物理删除和逻辑删除使用场景分析,感兴趣的朋友一起看看吧...2021-09-25
Springboot如何使用mybatis实现拦截SQL分页
这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19- 这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
- js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
- 这篇文章主要介绍了Mybatis执行update失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
- 这篇文章主要介绍了Mybatis plus中使用in查询出错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-06
解决Mybatis中mapper.xml文件update,delete及insert返回值问题
这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23- Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析...2021-06-04
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13