Mybatis返回结果封装map过程解析
需求
根据课程id列表,查询每个课程id的总数,放到一个map里
最简单的就是循环遍历,每一个都查询一次
网上说mybatis可以返回Map和List
尝试
直接返回Map类型
SELECTcourse_id,count(1) FROMlesson WHEREstatus=0 GROUPBYcourse_id;
返回的结果是:
{
"course_id":2,
"count(1)":13
}
即便我的数据库里有很过个id,返回结果也只有这一条数据。
如果直接使用Map
CouldnotwriteJSON:java.lang.Stringcannotbecasttojava.lang.Number;nestedexceptioniscom.fasterxml.jackson.databind.JsonMappingException:java.lang.Stringcannotbecasttojava.lang.Number
所以是不能直接返回Map的,而是先返回List
最终实现
Dao类中
List
Mapper.xml中
SELECTcourse_idas'key',count(1)as'value' FROMlesson WHEREtype!=1ANDstatus=0 GROUPBYcourse_id;
ServerImpl中,将List
publicMaplistLessonSumByCourseIdList(){ Map map=newHashMap<>(); List >list=courseDao.listLessonSumByCourseIdList(); if(list!=null&&!list.isEmpty()){ for(HashMap map1:list){ Longkey=null; Longvalue=null; for(Map.Entry entry:map1.entrySet()){ if("key".equals(entry.getKey())){ key=(Long)entry.getValue(); }elseif("value".equals(entry.getKey())){ value=(Long)entry.getValue(); } } map.put(key,value); } } returnmap; }
PS:count(1)数据库中查询这个默认是Long类型,转Integer会报错,所以返回类型是Map
java.lang.ClassCastException:java.lang.Longcannotbecasttojava.lang.Integer
PPS:但是通过这种方法查询出的数据有一些问题,如果我们想要的数据是,即便没有值,也应该返回0,那么就不能通过这种方法了,这种方法如果查询不到是没有值的,还是老老实实的循环吧
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。