Mybatis Map<>接收参数导致类型转换错误

List<Map<String,String>> maps = todoMapper.seletLineDate();
// 此时的状态是List<Map<String,Object>> 
Map<String, String> mapto = new HashMap<>();
for (Map<String, String> map : maps) {
    mapto.put(map.get("time"), map.get("number"));
}
// 此时的状态是Map<String,Long>

如果用Map<String,String>接返回值,会报LongString的类型错误

<select id="seletLineDate" resultType="map">
    select COUNT(task_uuid) number, end_date time
    from todo
    where user_uuid = #{userUuid}
    and done = true
    and end_date between #{startTime} and #{endTime}
    group by end_date
    order by end_date
</select>

原因是COUNT返回的Number类型会和JavaLong类型进行匹配

List<Map<String,String>> seletLineDate(String startTime, String endTime, String userUuid);

Mapper层用Map<String,String>接数据时,仍然返回Map<String,Long>只是明面上是Map<String,String>

修改方法

Object去接,或者转换COUNT的返回结果,CONVERT(COUNT(task_uuid),CHAR)

PS:

该错误在编辑时不会报错,但是在运行时会报错

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容