Mysql做SUM统计数量与Mybatis异常java.math.BigDecimal cannot be cast to java.lang.Integer

SQL做SUM查询统计时的异常记录

SQL查询语句

<select id="countByUserId" resultType="hashmap">
SELECT
SUM(
CASE
WHEN type = '1' THEN
1
ELSE
0
END
) blogCount1,
SUM(
CASE
WHEN type = '2' THEN
1
ELSE
0
END
) blogCount2
FROM
blog_info
WHERE
user_id = #{userId}
</select>


接口写法

Map<String, Integer> countByUserId(String userId);


目的是一次查询多种类型的数量,再设置对应的属性

Map<String, Integer> map = iBlogInfoDAO.countByUserId(blogInfo.getUserId());
hgoUserInfo.setBlogCount1(map.get("blogCount1"));
hgoUserInfo.setBlogCount2(map.get("blogCount2"));


但是mybatis返回了错误信息

java.math.BigDecimal cannot be cast to java.lang.Integer



原因是,sum()的结果是作为 java.math.BigDecimal 来处理的,不能直接转换成 java.lang.Integer,所以报错。

做如下修改,将 Integer 改为 Object

Map<String, Object> countByUserId(String userId);


然后通过 Integer.parseInt(obj.toString()); 来得到int值

Map<String, Object> map = iBlogInfoDAO.countByUserId(blogInfo.getUserId());
hgoUserInfo.setBlogCount1(Integer.parseInt(map.get("blogCount1").toString()));
hgoUserInfo.setBlogCount2(Integer.parseInt(map.get("blogCount2").toString()));