mybatis返回结果封装为map的探索
需求
根据课程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的探索的更多相关文章
- MyBatis 返回类型resultType为map时的null值不返回问题
问题一: 查询结果集中 某字段 的值为null,在map中不包含该字段的key-value对 解决:在mybatis.xml中添加setting参数 <!-- 在null时也调用 sett ...
- mybatis 返回值类型是Map
<select id="selectByMemberKey" resultType="java.util.HashMap"> SELECT memb ...
- MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合
笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...
- Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名
每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个jav ...
- mybatis返回map类型数据空值字段不显示的解决方法
在日常开发中,查询数据返回类型为map,数据库中有些自动值为null,则返回的结果中没有值为空的字段,则如何显示值为空的字段呢? Spring boot + MyBatis返回map中null值默认不 ...
- mybatis返回map结果集
今天突发奇想,想用mybatis返回一个map结果集,结果我就整了一下午,不过终于解决了 1.如果你确定返回的数据只有一条,你可以这样整 xml中: <select id="searc ...
- 深入了解MyBatis返回值
深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...
- spring boot 接口返回值封装
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- postgresql+mybatis返回值是数据库字段名
mybatis 返回map的时候是下划线 role_id, user_id 两种解决方法 1.重命名 postgresql不支持驼峰 加上双引号重命名 SELECT role_id "ro ...
随机推荐
- border,padding,margin盒模型理解
安静的敲着键盘,已势不可挡的姿势逼近php,我想我是一个幸福的人,未来不可期,做好现在,偶尔写着自己能看懂的API,慢慢悠悠的回味一下前端基础知识. 本文盒模型理解. <!DOCTYPE htm ...
- .NET下对Web.config与App.Config的增删改操作的代码
把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...
- Android 图片加载框架 Glide4.x
概述 Glide是一个图片加载框架,使得我们可以轻松的加载和展示图片 Glide4.x新增apply()来进行设置,apply可以调用多次,但是如果两次apply存在冲突的设置,会以最后一次为准 新增 ...
- C#实现完整的防盗自制监控系统
在您的手机中通知您家中的入侵者,并拍摄他们的照片 介绍 在本文中,我将展示一些DIY东西,用于安装监控系统,检测家中的入侵者,拍摄照片并通过手机通知您,必要时可以打电话给警察并提供照片以便快速识别 ...
- SVN下载与安装
首先打开浏览器上百度搜索“SVN”如下图: 或者点击:https://tortoisesvn.net/downloads.html 打开后链接后选择Downloads,选择需要下载的版本,比如我电脑是 ...
- macos 常用快捷键及操作
通用: 拷贝相当于window下的复制非苹果键盘(command == win option == alt control == ctrl)Command + C 拷贝(Copy)Command + ...
- C++中 #if 和 #ifdef 区别
以#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作#if 条件语句程序段1 //如果条件语句成立,那么就编译程序段1#endif程序段2//如果条件不语句成立,那么就编译程序段2# ...
- 【Linux基础】判断当前机器是虚拟机还是物理机
1.使用dmidecode命令查看(root权限) DMI (Desktop Management Interface, DMI)的主要组成部分是Management InformationForma ...
- JS中的闭包(closure)
JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...
- 二维数组中的查找[by Python]
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...