1-問題
在外掛生成的mapper.xml檔案中自己寫了新的sql,具體的程式碼如下:
<select id="pageQuery" resultType="com.QuestionTypeEntity">
...
</select>
寫完偵錯後,發現QuestionTypeEntity中typeName和createTime的值是null,其它屬性正常(有值)
2-可能的原因
返回實體中部分屬性有值,所以整體sql語法沒問題,所以可能的原因有:
- 資料庫表中資料不全(開發時在開發環境資料變動的可能性比較大)
- xml檔案中單詞拼寫錯誤或者和資料庫中欄位不一致了(團隊其他人修改了也有可能)
- xml中標籤的用法有問題
3-分析與驗證
- 檢查對應的資料庫表和記錄後發現不是資料的問題
- 檢查拼寫確認無誤,對映的xml是外掛生成在表結構未發生改變時都是一致的,所以也沒問題。(這裡說下我自己檢查表結構和對映檔案是否一致的方法:表結構簡單時可以一一比對;欄位較多時可以再備份後,重新生成檔案,用整合工具的版本控制來檢查;還可以檢視檔案和表的更新時間來分析)
- 最後檢查結果對映的resultType標籤,資料庫中欄位的命名多個單詞是以_隔開的而到了程式碼是駝峰的方式,resultType不能指定具體的屬性對映,必需完全一致才能對映
4-解決方法
- 將resultType換成resultMap(推薦)
- 將對應的entity中的屬性和資料庫表中的列取的完全一致(不推薦,命名規範不同,也不應該)
5-總結
在開發過程中,因為資料庫資料本身的不穩定性,所以當出現部分屬性缺失時,可以優先考慮和檢查是否資料不完整造成的,之後在考慮程式碼和組態檔的問題。
題外話
本文的目錄結構也是我解決問題的思考方式,覺得不錯的話可以借鑑一下,最後歡迎點贊,評論,收藏和轉發。