mybatisとmysql:java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
1555 ワード
mapperに次のsqlを書きます.
セグメント関数を使用して数量を統計し、戻り値はMap集合で、controllerでkeyに対応するvalueを取り、異常を報告する
mysqlにおけるセグメント統計による戻り値はBigDecimalであり,返されたmapセットを処理しない場合,応答はStringタイプであることが分かった.
解決方法:
サービスメソッドでBigDecimalタイプをIntegerタイプに変換
方法1:
方法2:
Integerに変換後、応答結果:
/**
* 、
* @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": " "
}