今天說一下自己在項目中遇到的問題,然后總結一下Integer引用類型和int值類型
關於默認值
- Integer默認為null
- int默認為0
為什么把數據實體設計成Integer或者不是int
大叔認識,這樣設計有助於我們區分這個字段是否被設置過,或者說是否被set過,而對於Integer來說,如果沒有被set過,它一定是null(當然你把它強制改為null除外),而對於int來說,你無法區別0和默認值,因為它默認就是0,我覺得這是最重要的一點。
- 可以區分屬性是否被設置過值
QueryWrapper里更加適合Integer
QueryWrapper是一個mybatis里的查詢構造器,你可以為實體屬性賦值,然后以它為一個依據,去查詢與它匹配的結果集,當你沒有為屬性賦值時,它是null,(而對於int來說,它是0,0往往是有意義的,在QueryWrapper里,你無法忽略int的屬性,這是十分尷尬的)。
例子,兩個實體
public class UserInfo extends BaseEntity {
private String name;
private String email;
private Integer age;
}
public class UserInfo extends BaseEntity {
private String name;
private String email;
private int age;
}
在QueryWrapper里進行條件的構造
UserInfo query = new UserInfo();
query.setName("lind");
query.setEmail("bfyxzls@sina.com"); //當沒有設置Age屬性時,它是null,在QueryWrapper里將被忽略,即查詢所有Age
UserInfo dbUser = userInfoMapper.selectOne(new QueryWrapper<>(query));
System.out.println(dbUser);
Assert.assertEquals("lind", dbUser.getName());
上面的代碼中,如果把Age改成int類型,那它只能查詢出Age=0的數據,這不是我們所希望的!