MyBatis的SUM映射问题及解决
程序员文章站
2022-06-15 14:18:07
目录sum映射问题原因解决方式sum 返回映射问题(sum报表统计接口返回)mybatis sum 返回值映射sum映射问题当我们根据类别进行统计,返回的数据类型为hashmap
sum映射问题
当我们根据类别进行统计,返回的数据类型为hashmap<string,object>,获取数值类型,容易报
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(); // 调用代码 list<hashmap<string, object>> result = qcdao.selectinfobytest(); int flags=(integer)result.get(0).get("flags"); // 报错 return jsonresult.ok(flags);
原因
sql中的 sum() 返回返回值在mybatis中是作为bigdecimal来返回的,而不能用integer来接收
解决方式
可以转换为字符串,然后再转换为int类型,在转换过程中,不能使用(string)这种方式强转,本不是string类型,可以使用tostring(),也可以使用string.valueof(),更简单的方式是用空字符串来转换;
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); }
需要注意的是,在强转之前最好判断一下是否为空,空字符串,类型是否匹配,避免强转失败;
sum 返回映射问题(sum报表统计接口返回)
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; /** * 购买数量 */ private integer commnumber; /** * 商品单价 */ private bigdecimal price; /** * 收货地址 */ private string useraddress; /** * 订单状态 0未支付 1正常 2删除 */ private integer orderstatus; /** * 收货人 */ private string username; /** * 收货人手机号 */ private string mobilephone; /** * 发货状态 0未发货 1已发货 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"; }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
微信小程序 swiper 组件遇到的问题及解决方法
-
ios 11和iphone x的相关适配问题及解决方法
-
C3P0连接池+MySQL的配置及wait_timeout问题的解决方法
-
Xcode 8打印log日志的问题小结及解决方法
-
Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案
-
兼容iOS 10 升级xcode8出现的问题及一些适配问题的解决方案
-
Mybatis传单个参数和
标签同时使用的问题及解决方法 -
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
基于java时区转换夏令时的问题及解决方法