需求

根据课程id 列表,查询每个课程id的总数,放到一个map里

最简单的就是循环遍历,每一个都查询一次
网上说mybatis可以返回Map 和 List<Map>两种类型

尝试

直接返回Map类型

<select id="listLessonSumByCourseIdList" resultType="java.util.HashMap">
SELECT course_id, count(1)
FROM lesson
WHERE status = 0
GROUP BY course_id;
</select>

返回的结果是:

{
"course_id":2,
"count(1)":13
}

即便我的数据库里有很过个id,返回结果也只有这一条数据。

如果直接使用 Map<Long, Integer> 类型强转,会报错
Could not write JSON: java.lang.String cannot be cast to java.lang.Number; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.lang.String cannot be cast to java.lang.Number

所以是不能直接返回Map的,而是先返回List<Map>

最终实现

Dao 类中
  List<HashMap<String,Object>> listLessonSumByCourseIdList();

Mapper.xml

<select id="listLessonSumByCourseIdList" resultType="java.util.HashMap">
SELECT course_id as 'key', count(1) as 'value'
FROM lesson
WHERE type != 1 AND status = 0
GROUP BY course_id;
</select>

ServerImpl 中, 将List<Map> 转成 Map

public Map<Long, Long> listLessonSumByCourseIdList() {
Map<Long, Long> map = new HashMap<>();
List<HashMap<String, Object>> list = courseDao.listLessonSumByCourseIdList();
if (list != null && !list.isEmpty()) {
for (HashMap<String, Object> map1 : list) {
Long key = null;
Long value = null;
for (Map.Entry<String, Object> entry : map1.entrySet()) {
if ("key".equals(entry.getKey())) {
key = (Long) entry.getValue();
} else if ("value".equals(entry.getKey())) {
value = (Long) entry.getValue();
}
}
map.put(key, value);
}
}
return map;
}

PS:count(1) 数据库中查询这个默认是Long类型,转Integer会报错,所以返回类型是Map<Long, Long>,而不能是Map<Long, Integer>
  java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

PPS:但是通过这种方法查询出的数据有一些问题,如果我们想要的数据是,即便没有值,也应该返回0,那么就不能通过这种方法了,这种方法如果查询不到是没有值的,还是老老实实的循环吧

原创文章,欢迎转载,转载请注明出处!

mybatis返回结果封装为map的探索的更多相关文章

  1. MyBatis 返回类型resultType为map时的null值不返回问题

    问题一:    查询结果集中 某字段 的值为null,在map中不包含该字段的key-value对 解决:在mybatis.xml中添加setting参数 <!-- 在null时也调用 sett ...

  2. mybatis 返回值类型是Map

    <select id="selectByMemberKey" resultType="java.util.HashMap"> SELECT memb ...

  3. MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合

    笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...

  4. Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名

    每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个jav ...

  5. mybatis返回map类型数据空值字段不显示的解决方法

    在日常开发中,查询数据返回类型为map,数据库中有些自动值为null,则返回的结果中没有值为空的字段,则如何显示值为空的字段呢? Spring boot + MyBatis返回map中null值默认不 ...

  6. mybatis返回map结果集

    今天突发奇想,想用mybatis返回一个map结果集,结果我就整了一下午,不过终于解决了 1.如果你确定返回的数据只有一条,你可以这样整 xml中: <select id="searc ...

  7. 深入了解MyBatis返回值

    深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...

  8. spring boot 接口返回值封装

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  9. postgresql+mybatis返回值是数据库字段名

    mybatis 返回map的时候是下划线 role_id, user_id 两种解决方法 1.重命名 postgresql不支持驼峰 加上双引号重命名  SELECT role_id "ro ...

随机推荐

  1. ServiceHub.DataWarehouseHost.exe内存泄漏问题的处理

    Visual Studio 2017的15.2版本在debug应用程序时,ServiceHub.DataWarehouseHost.exe会出现严重的内存泄漏的问题,一个小时左右,内存耗了将近8GB. ...

  2. Dubbo开发,利用项目模拟提供者和消费者之间的调用--初学

    开发工具:IDEA,虚拟机 VMware Workstation 预备工作:安装好zookeeper的虚拟机,电脑jdk更换为1.7,本地tomcat启动,能够访问以下页面即可进行开发 2.建立以下s ...

  3. SpringMVC解决@ResponseBody返回Json的Date日期类型的转换问题

    在做项目的时候,发现后台把Date类型的属性以json字符串的形式返回,前台拿不到转换后的日期格式,始终响应回去的都是long类型时间戳. 查阅资料之后找到解决方法: 方法一(在springmvc的x ...

  4. c/c++ 多线程 等待一次性事件 future概念

    多线程 等待一次性事件 future概念 背景:有时候,一个线程只等待另一个线程一次,而且需要它等待的线程的返回值. 案例:滴滴叫车时,点完了叫车按钮后,叫车的后台线程就启动了,去通知周围的出租车.这 ...

  5. linux FTP安全配置

    linux FTP安全配置 关闭防火墙,selinux安全机制   service iptables stop  setenforce 0 匿名用户 匿名用户只能访问ftp服务器上的/var/ftp/ ...

  6. Win32 API翻译

    这是从MSDN里面的Win32 SDK API函数.结构.通知.消息等等超过3000个.其中一半是整理自别人翻译. http://files.cnblogs.com/files/sishenzaixi ...

  7. Python爬虫之pyquery库的基本使用

    # 字符串初始化 html = ''' <div> <ul> <li class = "item-0">first item</li> ...

  8. 我的第一个python web开发框架(32)——定制ORM(八)

    写到这里,基本的ORM功能就完成了,不知大家有没有发现,这个ORM每个方法都是在with中执行的,也就是说每个方法都是一个完整的事务,当它执行完成以后也会将事务提交,那么如果我们想要进行一个复杂的事务 ...

  9. Python 函数调用&定义函数&函数参数

    一.函数调用 在python中内置了很多函数,我们可以直接调用 .想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3 ...

  10. idea软件破解汉化

    →http://idea.lanyus.com/上可以找到最新的破解补丁,下载并放到软件的bin目录下  →更改bin目录下的两个文件:Idea.exe.vmoptions和Idea64.exe.vm ...