問題分析
int selectDeviceMonthRepairCount(String deviceType, String month);
<select id="selectDeviceMonthRepairCount" resultType="int">SELECT SUM(repair_count)FROM warranty_recordsWHERE device_type = #{deviceType}AND nian_yue = #{month}</select>
上面代碼,在數據為空的時候,查詢結果是null,會導致報錯:
Mapper method 'com.aibaizhi.system.mapper.DashboardDataMapper.selectDeviceMonthRepairCount attempted to return null from a method with a primitive return type (int).
解決方案
解決辦法就是查詢的時候,如果為null,則設置一個默認值0
<select id="selectDeviceMonthRepairCount" resultType="int">SELECT COALESCE(SUM(repair_count), 0)FROM warranty_recordsWHERE device_type = #{deviceType}AND nian_yue = #{month}
</select>
SELECT COALESCE(SUM(repair_count), 0) 是一個SQL語句片段,它使用了COALESCE函數來確保查詢結果始終返回一個值,即使SUM(repair_count)可能為NULL。
讓我們分解這個語句:
SUM(repair_count):
這部分計算repair_count列的總和。但是,如果沒有任何行滿足查詢條件(例如,給定的device_type和year_month沒有匹配的記錄),SUM函數可能會返回NULL。
COALESCE(…, 0):
COALESCE函數接受一系列參數,并返回第一個非NULL的值。在這個例子中,它檢查SUM(repair_count)的值。
如果SUM(repair_count)是NULL(即沒有匹配的記錄),則COALESCE返回其第二個參數,即0。
如果SUM(repair_count)不是NULL(即至少有一條匹配的記錄),則COALESCE返回SUM(repair_count)的實際值。
因此,整個語句的意思是:“計算repair_count的總和,但如果沒有匹配的記錄導致總和為NULL,則返回0。”
這在處理可能返回空集(即沒有匹配記錄)的查詢時非常有用,因為它確保了你始終得到一個有效的整數值,而不是一個可能導致后續代碼出現問題的NULL值。