错误描述:
在使用Mybatis的项目中有一个查询最新插入数据的需求。我写了如下SQL语句:
当表中有数据时,使用这个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).
也就是因为表中没有数据,所以查询返回null,不符合double类型,所以出现错误。
解决方法:
在mysql中可以使用IFNULL(exp1,exp2)方法,它的含义是如果exp1不为null则正常返回,如果exp1位null,则返回exp2。
于是我改写了SQL如下图(错误的):
结果仍然是报出相同的错误!!!就在这里困扰了我好久!!!
最后折腾一番后,发现ifnull()和max()两个函数配合起来才不会出错!换句话说使用max()、min()、avg()函数一定使用ifnull()防止返回null导致的错误。(这个错误不一定会有异常报出)
更改SQL如下图:
更改后查询返回了正确结果0。
我尝试了ifnull(1,0)可以正确返回1,ifnull(null,0)可以正确返回0,但是ifnull(t_val,0)没有返回0的具体原因还是没搞懂,希望看到这个问题的朋友能够给我指点迷津,谢谢~?