文章目录

  • 背景
  • 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的问题相关推荐

  1. MyBatis查询返回Map类型数据

    1.Mapper中SQL: <select id="getBaseMap" resultType="java.util.HashMap"> sele ...

  2. 【mybatis】mybatis中 返回map集合

    关于mybatis返回map集合的操作: 1.mapper.xml中写一个查询返回map的sql <select id="findMap" parameterType=&qu ...

  3. mybatis查询返回null解决方案

    mybatis查询返回null解决方案 参考文章: (1)mybatis查询返回null解决方案 (2)https://www.cnblogs.com/zipon/p/6361661.html 备忘一 ...

  4. mybatis查询返回空,SQL数据库执行有数据!

    我的数据库为Oracle,可以插入,更新,但在在Mybatis中执行SQL查询返回的数据发现返回NULL,但是生成SQL放在数据库中查询是有数据的,并且SQL是正确的! 这是没有改动的XML: < ...

  5. Mybatis 查询 返回值中只有id有值,其他都是null;

    最近在重温mybatis, 但是在做练习的时候发现一个问题; 查询,简单的查询,返回之后发现结果中,只有id被映射了值,其他属性都是null; 很纳闷,为什么一个简单的测试会出现这种问题; 一开始以为 ...

  6. Hibernate3查询返回Map探秘

    2019独角兽企业重金招聘Python工程师标准>>> -源于我对它的一个误会 sparta-紫杉 2010-4-14 9:02 开发环境: eclipse3.4.2 + weblo ...

  7. mybatis查询返回null的原因_可怕!你没看错,这次确实是纯手工实现一个MyBatis框架...

    目录 前言 JDBC MyBatis 源码分析 前置知识 原理分析 自己实现一个 MyBatis 框架 前言 MyBatis是一个非常优秀的持久层应用框架,目前几乎已经一统天下.既然是持久层框架,那么 ...

  8. mybaits八:select查询返回map集合

    返回一条纪录的map package com.atChina.dao;import java.util.List; import java.util.Map;import org.apache.iba ...

  9. Mybatis 查询返回List<String>集合

    返回List<String>集合时,需要将resultType的值定义为集合中元素类型,而不是返回集合本身. 有时候,我们不需要整个表的所有字段,而是只需要某一个字段的内容,比如:我希望从 ...

最新文章

  1. (转) 服务接口统一返回的格式
  2. shell中遍历目录
  3. python list合并拼接
  4. oracle 的行级触发器
  5. 编程体系结构(08):Spring.Mvc.Boot框架
  6. dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset
  7. python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
  8. 当电脑打开显示每日新闻联播主要内容
  9. 【ICPC-369】uva 12096 The SetStack Computer
  10. 蓝桥杯个人总结(入门练习-VIP题)
  11. linux文件读取程序,Linux系统编程:文件的读取写入
  12. (数学)POJ - 1365 Prime Land
  13. 【Java面试题】常规Java面试题分享
  14. 边缘设备、系统及计算杂谈(2)——go语言
  15. 聊一位倾慕已久的他——致敬图灵
  16. 1060显卡支持dx12吗_GTX1660和GTX1060哪个性价比高?GTX1060和GTX1660显卡区别对比
  17. 百度/谷歌/微软/Facebook 人工智能发展方向
  18. 学计算机当教师,我是电大出来的小学教育教师资格证可以进学校当老师吗? 我想当初中计算机老师有什么要求?...
  19. 手机号以及区号的正则判断方法
  20. 爬虫python下载文献代码_Python爬虫案例:爬取微信公众号文章

热门文章

  1. stm32 diy 机械键盘
  2. stm32滴答计时器_STM32---系统滴答定时器(systick)应用
  3. 判断一段时间是否包含令一段时间
  4. java生成MD5校验码(文件/字符串)
  5. Win10对路径“”的访问被拒绝解决方法
  6. 谁再把kill命令说成“杀死“就应该打屁股了
  7. 社交网络匿名与隐私保护
  8. HTML5插入视频音频的方式
  9. QQ面板上的所有链接按钮、qq聊天窗口中的那些超级链接打不开的原因
  10. 2010移动开发者大会系列报道:在App Store日进斗金的推广秘诀