MyBatis的SUM映射問題及解決
SUM映射問題
當(dāng)我們根據(jù)類別進(jìn)行統(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)這種方式強(qiáng)轉(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);
?? ?}需要注意的是,在強(qiáng)轉(zhuǎn)之前最好判斷一下是否為空,空字符串,類型是否匹配,避免強(qiáng)轉(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;
/**
* 收貨人手機(jī)號
*/
private String mobilephone;
/**
* 發(fā)貨狀態(tài) 0未發(fā)貨 1已發(fā)貨 2確認(rèn)收貨
*/
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)文章
SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Gateway
這篇文章主要介紹了SpringCloud Gateway微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
SpringBoot調(diào)用對方webService接口的幾種方法示例
平常我們開發(fā)調(diào)用接口一般會用到幾種數(shù)據(jù)格式,比如有restful的,這個是目前最流行的,也是最簡單開發(fā)的,還有一種就是webservice數(shù)據(jù)格式,本文給大家介紹了幾種SpringBoot調(diào)用對方webService接口的方法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11
jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫進(jìn)行修改url操作
這篇文章主要為大家詳細(xì)介紹了jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫進(jìn)行修改url操作,感興趣的小伙伴們可以參考一下2016-06-06
springboot實戰(zhàn)權(quán)限管理功能圖文步驟附含源碼
這篇文章主要為大家介紹了springboot實戰(zhàn)權(quán)限管理功能圖文步驟及示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Java語言實現(xiàn)簡單FTP軟件 FTP軟件主界面(4)
這篇文章主要為大家詳細(xì)介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP軟件主界面編寫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
基于SpringBoot實現(xiàn)發(fā)送帶附件的郵件
這篇文章主要介紹了基于SpringBoot實現(xiàn)發(fā)送帶附件的郵件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
spring boot里增加表單驗證hibernate-validator并在freemarker模板里顯示錯誤信息(推
這篇文章主要介紹了spring boot里增加表單驗證hibernate-validator并在freemarker模板里顯示錯誤信息的相關(guān)資料,需要的朋友可以參考下2018-01-01

