阿里巴巴JAVA開發手冊中寫道:
- 關於基本數據類型與包裝數據類型的使用標準如下:
1) 【強制】所有的 POJO 類屬性必須使用包裝數據類型。
2) 【強制】RPC 方法的返回值和參數必須使用包裝數據類型。
3) 【推薦】所有的局部變量使用基本數據類型。
說明:POJO 類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進行賦值,任何
NPE 問題,或者入庫檢查,都由使用者來保證。
正例:數據庫的查詢結果可能是 null,因爲自動拆箱,用基本數據類型接收有 NPE 風險。
反例:比如顯示成交總額漲跌情況,即正負 x%,x 爲基本數據類型,調用的 RPC 服務,調用
不成功時,返回的是默認值,頁面顯示爲 0%,這是不合理的,應該顯示成中劃線。所以包裝
數據類型的 null 值,能夠表示額外的信息,如:遠程調用失敗,異常退出。
測試用例:
pojo:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test {
private Integer id;
private String name;
private Integer age;
private int num;
}
service:
public void selTest(){
Test t = (Test) testMapper.selectById(1);
System.out.println(t.getAge());//Integer
System.out.println(t.getNum());//int
}
數據庫:
其餘簡單代碼不再展示。
請求service
測試結果:
這裏由於num字段是int類型,所以即使從數據庫中查出的數據爲Null,但是由於自動拆箱,int類型數據有默認值,所以數據庫中的null映射到int類型的變量num上,就變成了0,這時不正確的。
所以pojo中的字段應該都爲包裝類型。