MyBatis的SUM映射問題及解決
SUM映射問題
當我們根據(jù)類別進行統(tǒng)計,返回的數(shù)據(jù)類型為HashMap<String,Object>,獲取數(shù)值類型,容易報
java.math.BigDecimal cannot be cast to java.lang.Integer
場景如下:
// Mapper層 <select id="selectInfoByTest" resultType="map"> ? ? SELECT SUM(flag) as flags,taskid FROM qcdata GROUP BY taskid </select> // 接口 List<HashMap<String, Object>> selectInfoByTest(); ? // 調(diào)用代碼 List<HashMap<String, Object>> result = qcDao.selectInfoByTest(); int flags=(Integer)result.get(0).get("flags"); // 報錯 return JSONResult.ok(flags);
原因
sql中的 sum() 返回返回值在mybatis中是作為BigDecimal來返回的,而不能用Integer來接收
解決方式
可以轉(zhuǎn)換為字符串,然后再轉(zhuǎn)換為int類型,在轉(zhuǎn)換過程中,不能使用(String)這種方式強轉(zhuǎn),本不是String類型,可以使用toString(),也可以使用String.valueOf(),更簡單的方式是用空字符串來轉(zhuǎn)換;
?? ?public JSONResult test() { ?? ??? ?List<HashMap<String, Object>> result = qcDao.selectInfoByTest(); ? ?? ??? ?// toString ?? ??? ?int flags=Integer.parseInt(result.get(0).get("flags").toString());? ?? ??? ?// String.valueOf ?? ??? ?int flags2=Integer.parseInt(String.valueOf(result.get(0).get("flags"))); ?? ??? ?// 空字符串 ?? ??? ?int flags3=Integer.parseInt(result.get(0).get("flags")+""); ?? ??? ?return JSONResult.ok(flags+flags2+flags3); ?? ?}
需要注意的是,在強轉(zhuǎn)之前最好判斷一下是否為空,空字符串,類型是否匹配,避免強轉(zhuǎn)失??;
sum 返回映射問題(sum報表統(tǒng)計接口返回)
MyBatis sum 返回值映射
mapper.xml代碼
?<select id="pieChart" ? ?resultType="map"> ? ? ? ?select ? sum(com.thinkmoney*ord.commnumber) ?as totalPrice , com.category as ?category ?from commodity com,orders ord ? ? ? ? where com.commid=ord.commid and ord.orderstatus=1 ? ? ? ? GROUP BY com.category ?</select>
pojo
private static final long serialVersionUID = 1L; /** * 訂單id */ private String id; /** * 訂單編號 */ private String ordernumber; /** * 下單時間 */ private Date ordertime; /** * 商品名 */ private String commname; /** * 商品id */ private String commid; /** * 商品描述 */ private String commdesc; /** * 購買數(shù)量 */ private Integer commnumber; /** * 商品單價 */ private BigDecimal price; /** * 收貨地址 */ private String useraddress; /** * 訂單狀態(tài) 0未支付 1正常 2刪除 */ private Integer orderstatus; /** * 收貨人 */ private String username; /** * 收貨人手機號 */ private String mobilephone; /** * 發(fā)貨狀態(tài) 0未發(fā)貨 1已發(fā)貨 2確認收貨 */ private Integer kdstatus; /** * 快遞編號 */ private String kdnumber; /** * 買家id */ private String buyuserid; /** * 賣家id */ private String selluserid; private Commodity commodity; private BigDecimal totalPrice;
controller
/** * 管理員首頁 餅圖 * */ @GetMapping("/echars/piechart") public String piechart(HttpSession session,HttpServletRequest request){ List<HashMap<String,Object>> result =ordersService.pieChart(); List<String> totalPriceList= new ArrayList<String>(); List<String> categoryList= new ArrayList<String>(); for( Map<String, Object> mapList : result ) { totalPriceList.add(mapList.get("totalPrice").toString()); categoryList.add(mapList.get("category").toString()); } session = request.getSession(); System.out.println("totalPriceList:"+totalPriceList+",categoryList:"+categoryList); session.setAttribute("totalPriceList",totalPriceList); session.setAttribute("categoryList",categoryList); return "/admin/echars/piechart"; }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security OAuth2 token權(quán)限隔離實例解析
這篇文章主要介紹了Spring Security OAuth2 token權(quán)限隔離實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11MyBatis-Plus條件構(gòu)造器Wrapper應(yīng)用實例
QueryWrapper是用于查詢的Wrapper條件構(gòu)造器,可以通過它來構(gòu)建SELECT語句中的WHERE條件,這篇文章主要介紹了MyBatis-Plus數(shù)據(jù)表操作條件構(gòu)造器Wrapper,需要的朋友可以參考下2023-09-09springboot集成schedule實現(xiàn)定時任務(wù)
在項目開發(fā)過程中,我們經(jīng)常需要執(zhí)行具有周期性的任務(wù)。通過定時任務(wù)可以很好的幫助我們實現(xiàn)。本篇文章主要介紹了springboot集成schedule實現(xiàn)定時任務(wù),感興趣的小伙伴們可以參考一下2018-05-05spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護機制詳解
這篇文章主要介紹了spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護機制詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問題
這篇文章主要介紹了解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10