mybatisとmysql:java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer

1555 ワード

mapperに次のsqlを書きます.
/**
     *         、          
     * @param user_id
     * @return
     * */
    @Select("SELECT  " +
            "SUM(CASE WHEN info_status = 0 AND info_type = 0 THEN 1 ELSE 0 END) AS unread_system_num, " +
            "SUM(CASE WHEN info_status = 0 AND info_type = 1 THEN 1 ELSE 0 END) AS unread_invite_num  " +
            "FROM user_information " +
            "WHERE user_id = #{user_id}")
    Map getUnReadInfosNum(@Param(value = "user_id") long user_id); 

セグメント関数を使用して数量を統計し、戻り値はMap集合で、controllerでkeyに対応するvalueを取り、異常を報告する
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer

mysqlにおけるセグメント統計による戻り値はBigDecimalであり,返されたmapセットを処理しない場合,応答はStringタイプであることが分かった.
{
  "data": {
    "unread_system_num": "12",
    "unread_invite_num": "23"
  },
  "errcode": 0,
  "msg": "    "
} 

解決方法:
サービスメソッドでBigDecimalタイプをIntegerタイプに変換
方法1:
Integer a = Integer.parseInt(unReadInformationNum.get("unread_system_num").toString());

方法2:
Integer a = ((BigDecimal) unReadInformationNum.get("unread_system_num")).intValue(); 

Integerに変換後、応答結果:
{
  "data": {
    "unread_system_num": 12,
    "unread_invite_num": 23
  },
  "errcode": 0,
  "msg": "    "
}