MyBatis Error:BindingException Mapper method attempted to return null

错误描述:

在使用Mybatis的项目中有一个查询最新插入数据的需求。我写了如下SQL语句:

163517_fSbR_3488884.png

当表中有数据时,使用这个SQL查询是没有错误的,但是当表中没有数据则会出现如下错误:

org.apache.ibatis.binding.BindingException: Mapper method 'com.lixin.mapper.TemperatureMapper.getCurrentOutTemperature attempted to return null from a method with a primitive return type (double).

163811_s695_3488884.png

也就是因为表中没有数据,所以查询返回null,不符合double类型,所以出现错误。

解决方法:

在mysql中可以使用IFNULL(exp1,exp2)方法,它的含义是如果exp1不为null则正常返回,如果exp1位null,则返回exp2。

于是我改写了SQL如下图(错误的):

164502_Mgwr_3488884.png

结果仍然是报出相同的错误!!!就在这里困扰了我好久!!!

最后折腾一番后,发现ifnull()max()两个函数配合起来才不会出错!换句话说使用max()、min()、avg()函数一定使用ifnull()防止返回null导致的错误。(这个错误不一定会有异常报出)

更改SQL如下图:

165536_tiKn_3488884.png

更改后查询返回了正确结果0。

我尝试了ifnull(1,0)可以正确返回1,ifnull(null,0)可以正确返回0,但是ifnull(t_val,0)没有返回0的具体原因还是没搞懂,希望看到这个问题的朋友能够给我指点迷津,谢谢~?

 

转载于:https://my.oschina.net/codelx/blog/1606876

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值