【问题记录】MyBatis查询数据库返回多个不同类型参数的结果集的接收方式

时间:2023-12-10 21:56:02

其实是个非常简单的问题,但是这玩意儿弄得我很难受,又浪费了一个下午的时间,简直了……

问题大概是,我在查询数据库时,查询的结果有两个,一个是varchar格式的字段,一个int格式字段,例如:

  select name,count(*) as num from student group by friend;

获取结果的时候,我将返回值类型设置为了HashMap,接受用的是List<HashMap<String,String>>,事实上这种方法能够接收到数据,而且遍历List时通过toString()方法也可以正常输出,例如:{name=A, num=20}

但是这么做的问题是,(例)当我尝试取出Map中的age字段时,就会报错,提示:

  java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String

告知我不能进行类型转换(long --> String)。遇到这个错误之后我浪费了很长一段时间来处理,最后才意识到可能是返回值类型不同造成的问题,我本以为int类型的返回值用Map<String,String>接收之后就可以被强转为String,但是显然不是这样,因此要么换一种接收方式(实体类),要么就转换类型。

这样的话问题就简单多了,在查询的时候加一个类型转换,将参数中的int转换为String(char)就好了(实体类太麻烦了)。

mysql中类型转换的函数有两种:

  1)CAST(value as type) 就是CAST(xxx AS 类型)

  2)CONVERT(value, type) 就是CONVERT(xxx,类型)

如下:

  select name,convert(count(*),char) as num from student group by friend;

这样用Map<String,String>来接就没问题了,也能正常的取出值了。