当前位置: 移动技术网 > IT编程>开发语言>Java > Mybatis返回结果封装map过程解析

Mybatis返回结果封装map过程解析

2020年09月20日  | 移动技术网IT编程  | 我要评论
需求根据课程id 列表,查询每个课程id的总数,放到一个map里最简单的就是循环遍历,每一个都查询一次网上说mybatis可以返回map 和 list<map>两种类型尝试直接返回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,那么就不能通过这种方法了,这种方法如果查询不到是没有值的,还是老老实实的循环吧

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网