• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL分段统计SQL写法 与 Mybatis 错误 java.math.BigDecimal cannot be cast to java.lang.Integer_mysql

mysql 搞代码 7年前 (2018-06-08) 135次浏览 已收录 0个评论

mysql分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

mysql> select     -> sum(case when score<60 then 1 else 0 end) as '<60',     -> sum(case when score>=60 and score<=69 then 1 else 0 end) as '60~69',     -> sum(case when score>=70 and score<=79 then 1 else 0 end) as '70~79',     -> sum(case when score>=80 and score<=89 then 1 else 0 end) as '80~89',     -> sum(case when score>-90 then 1 else 0 end) as '>=90'     -> from student_course     -> ; +------+-------+-------+-------+------+ | <60  | 60~69 | 70~79 | 80~89 | >=90 | +------+-------+-------+-------+------+ |    2 |     1 |     1 |     1 |   10 | +------+-------+-------+-------+------+

 采用mybatis时,xml文件配置如下处理:

  <select id="getScoreStatistics" resultType="map">       select          sum(case when score &lt; 60 then 1 else 0 end) as '&lt;60',         sum(case when score &gt;= 60 and score &lt;= 69 then 1 else 0 end) as '60~69',         sum(case when score &gt;= 70 and score &lt;= 79 then 1 else 0 end) as '70~79',         sum(case when score &gt;= 80 and score &lt;= 89 then 1 else 0 end) as '80~89',         sum(case when score &gt;= 90 then 1 else 0 end) as '&gt;=90'     from student_course   </select>

mapper接口:

Map<String, Object> getScoreStatistics();

注意,这里如果使用 Map<String, Integer> 作为返回值,会报错:

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

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

正确的处理方法是,返回 Map<String, Object>,然后

{“<60″:2,”60~69″:1,”70~79″:1,”80~89″:1,”>=90″:5}

int count1 = Integer.parseInt(resultMap.get("<60").toString());

通过Object类型的 toString()方法,然后 Integer.parseInt() 这里才能得到正确的结果。

当然我们也可以直接返回:Map<String, BigDecimal> getScoreStatistics();

然后通过BigDecimal.intValue() 来获得我们需要的值:

    Map<String, BigDecimal> getScoreStatistics();

Map<String, BigDecimal> resultMap = this.studentCourseMapper.getScoreStatistics();
int
count = resultMap.get("<60").intValue();

 总结

1)sql中的 sum() 返回返回值在mybatis中是作为BigDecimal来返回的,所以我们有两种方法来处理:

   1> 返回 Object 值,然后通过 Integer.parseInt(obj.toString()); 来得到int值;

   2> 返回 BigDecimal 值,然后通过 BigDecimal.intValue()得到需要的值,应该说我们推荐使用第二种方法。

2)mysql分段统计方法:sum(case when score<60 then 1 else 0 end)

欢迎大家阅读《MySQL分段统计SQL写法 与 Mybatis 错误 java.math.BigDecimal cannot be cast to java.lang.Integer_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL分段统计SQL写法 与 Mybatis 错误 java.math.BigDecimal cannot be cast to java.lang.Integer_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址