springboot~Integer和int如何選擇,Integer的意義何在

今天說一下本身在項目中遇到的問題,而後總結一下Integer引用類型和int值類型mybatis

關於默認值

  1. Integer默認爲null
  2. int默認爲0

爲何把數據實體設計成Integer或者不是int

大叔認識,這樣設計有助於咱們區分這個字段是否被設置過,或者說是否被set過,而對於Integer來講,若是沒有被set過,它必定是null(固然你把它強制改成null除外),而對於int來講,你沒法區別0和默認值,由於它默認就是0,我以爲這是最重要的一點。app

  1. 能夠區分屬性是否被設置過值

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的數據,這不是咱們所但願的!code

相關文章
相關標籤/搜索