mybatis查询返回map的问题
文章目录
- 背景
- 1、mybatis只返回单个map
- 2、查询返回map的list
- 3、利用mybatis的@MapKey注解返回map
- 4、重写handler
背景
假设背景:
想获取某个省下各个市有多少问题,以
Map<String, Integer> 的形式返回,key 代表某个市的问题个数
数据库表为:
prov_code varchar 代表省的编码
city_code varchar 代表市的编码
problem varchar 代表拥有的某个问题
所以有一条该市的数据就说明该市多了一个问题,假设500为江苏省的编码,510位南京市的编码,520为苏州市的编码,数据为
500 510 问题1
500 510 问题2
500 510 问题3
500 520 问题1
500 520 问题3
正确返回的某个省下各个市有多少问题的map结果应为
“510”:3,
“520”:2
看下以下几种写法
1、mybatis只返回单个map
mapper接口:
Map<String,Object> selectCount(String provCode);
mybatis的xml文件中:
<select id="selectCount" resultType="map">select city_code as "cityCode",count(*) as "count"from prov_code_countwhere prov_code = #{provCode}group by city_code</select>
此时会报错,期待的是一个map,但是得到的结果是两个map,为
”cityCode“:”南京","count":3
”cityCode“:”苏州","count":2
可见mybatis返回的map是只能返回一个的,遇到多的就会报错,会将select后面的字段的名称作为key,值作为value。可参考:https://www.codeleading.com/article/52893335081/
2、查询返回map的list
这是第一个正确写法。
想要获取想要的效果,mybatis返回的是一个list的map,每个map同上一个结果,但是是list形式的
[
{”cityCode“:”南京","count":3},
{”cityCode“:”苏州","count":2}
]
mapper接口:
List<Map<String,Object>> selectCount(String provCode);
xml文件:
<select id="selectCount" resultType="map">select city_code as "cityCode",count(*) as "count"from prov_code_countwhere prov_code = #{provCode}group by city_code</select>
service层:
Map<String, Integer> branch2Count = toBranch2Count(mapper.selectCount(provCode);
private Map<String, Integer> toBranch2Count(List<Map<String, Object>> resMapList) {if (CollectionUtils.isEmpty(resMapList)) {return Collections.emptyMap();}Map<String, Integer> branch2Count = new HashMap<>(resMapList.size());resMapList.forEach(item -> {branch2Count.put(String.valueOf(item.get("cityCode")), Integer.parseInt(String.valueOf(item.get("count"))));});return branch2Count;}
可以看出这种方式mapper是返回的list形式的map,然后再在service层转换成所需的map的形式。
3、利用mybatis的@MapKey注解返回map
要先定义一个do对象,利用mybatis的@MapKey注解
do对象,分别为城市的编码,和该城市的问题的数量
Branch2CountDO.java
private String branchCode;
private Integer count;
mapper接口:
@MapKey("branchCode")
Map<String,Branch2CountDO> selectCount(String provCode);
xml文件:
先定义resultmap,再写sql
<resultMap id="result1" type="xxx.Branch2CountDO"><result column="city_code" property="branchCode"/><result column="count" property="count"/>
</resultMap><select id="selectCount" resultMap="result1">select city_code , count(*) as "count"from prov_code_count where prov_code = #{provCode}group by city_code
</select>
service层:
Map<String, Branch2CountDO> res = mapper.selectCount(provCode);
Map<String, Integer> branch2Count = res.keySet().stream().collect(Collectors.toMap(branchCode -> branchCode, branchCode -> res.get(branchCode).getCount())
4、重写handler
参考:https://blog.csdn.net/sou_liu/article/details/47755635
mybatis查询返回map的问题相关推荐
- MyBatis查询返回Map类型数据
1.Mapper中SQL: <select id="getBaseMap" resultType="java.util.HashMap"> sele ...
- 【mybatis】mybatis中 返回map集合
关于mybatis返回map集合的操作: 1.mapper.xml中写一个查询返回map的sql <select id="findMap" parameterType=&qu ...
- mybatis查询返回null解决方案
mybatis查询返回null解决方案 参考文章: (1)mybatis查询返回null解决方案 (2)https://www.cnblogs.com/zipon/p/6361661.html 备忘一 ...
- mybatis查询返回空,SQL数据库执行有数据!
我的数据库为Oracle,可以插入,更新,但在在Mybatis中执行SQL查询返回的数据发现返回NULL,但是生成SQL放在数据库中查询是有数据的,并且SQL是正确的! 这是没有改动的XML: < ...
- Mybatis 查询 返回值中只有id有值,其他都是null;
最近在重温mybatis, 但是在做练习的时候发现一个问题; 查询,简单的查询,返回之后发现结果中,只有id被映射了值,其他属性都是null; 很纳闷,为什么一个简单的测试会出现这种问题; 一开始以为 ...
- Hibernate3查询返回Map探秘
2019独角兽企业重金招聘Python工程师标准>>> -源于我对它的一个误会 sparta-紫杉 2010-4-14 9:02 开发环境: eclipse3.4.2 + weblo ...
- mybatis查询返回null的原因_可怕!你没看错,这次确实是纯手工实现一个MyBatis框架...
目录 前言 JDBC MyBatis 源码分析 前置知识 原理分析 自己实现一个 MyBatis 框架 前言 MyBatis是一个非常优秀的持久层应用框架,目前几乎已经一统天下.既然是持久层框架,那么 ...
- mybaits八:select查询返回map集合
返回一条纪录的map package com.atChina.dao;import java.util.List; import java.util.Map;import org.apache.iba ...
- Mybatis 查询返回List<String>集合
返回List<String>集合时,需要将resultType的值定义为集合中元素类型,而不是返回集合本身. 有时候,我们不需要整个表的所有字段,而是只需要某一个字段的内容,比如:我希望从 ...
最新文章
- (转) 服务接口统一返回的格式
- shell中遍历目录
- python list合并拼接
- oracle 的行级触发器
- 编程体系结构(08):Spring.Mvc.Boot框架
- dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset
- python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
- 当电脑打开显示每日新闻联播主要内容
- 【ICPC-369】uva 12096 The SetStack Computer
- 蓝桥杯个人总结(入门练习-VIP题)
- linux文件读取程序,Linux系统编程:文件的读取写入
- (数学)POJ - 1365 Prime Land
- 【Java面试题】常规Java面试题分享
- 边缘设备、系统及计算杂谈(2)——go语言
- 聊一位倾慕已久的他——致敬图灵
- 1060显卡支持dx12吗_GTX1660和GTX1060哪个性价比高?GTX1060和GTX1660显卡区别对比
- 百度/谷歌/微软/Facebook 人工智能发展方向
- 学计算机当教师,我是电大出来的小学教育教师资格证可以进学校当老师吗? 我想当初中计算机老师有什么要求?...
- 手机号以及区号的正则判断方法
- 爬虫python下载文献代码_Python爬虫案例:爬取微信公众号文章
热门文章
- stm32 diy 机械键盘
- stm32滴答计时器_STM32---系统滴答定时器(systick)应用
- 判断一段时间是否包含令一段时间
- java生成MD5校验码(文件/字符串)
- Win10对路径“”的访问被拒绝解决方法
- 谁再把kill命令说成“杀死“就应该打屁股了
- 社交网络匿名与隐私保护
- HTML5插入视频音频的方式
- QQ面板上的所有链接按钮、qq聊天窗口中的那些超级链接打不开的原因
- 2010移动开发者大会系列报道:在App Store日进斗金的推广秘诀