錯誤描述:mysql
在使用Mybatis的項目中有一個查詢最新插入數據的需求。我寫了以下SQL語句:sql
當表中有數據時,使用這個SQL查詢是沒有錯誤的,可是當表中沒有數據則會出現以下錯誤:apache
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).app
也就是由於表中沒有數據,因此查詢返回null,不符合double類型,因此出現錯誤。函數
解決方法:spa
在mysql中能夠使用IFNULL(exp1,exp2)方法,它的含義是若是exp1不爲null則正常返回,若是exp1位null,則返回exp2。get
因而我改寫了SQL以下圖(錯誤的):it
結果仍然是報出相同的錯誤!!!就在這裏困擾了我很久!!!io
最後折騰一番後,發現ifnull()和max()兩個函數配合起來纔不會出錯!換句話說使用max()、min()、avg()函數必定使用ifnull()防止返回null致使的錯誤。(這個錯誤不必定會有異常報出)map
更改SQL以下圖:
更改後查詢返回了正確結果0。
我嘗試了ifnull(1,0)能夠正確返回1,ifnull(null,0)能夠正確返回0,可是ifnull(t_val,0)沒有返回0的具體緣由仍是沒搞懂,但願看到這個問題的朋友可以給我指點迷津,謝謝~🙏