最近在工作中遇到了一個問題,使用mybatis新增數(shù)據(jù)的時候,定義好一個實體類,填充對應的數(shù)據(jù)并插入表之后。根據(jù)返回的id查詢的時候,發(fā)現(xiàn)本不應該有數(shù)據(jù)的字段有數(shù)據(jù)返回,找了半天才解決這個問題。

  原因mybatis在生成目標類進行映射時,會先檢查構造函數(shù)聲明情況,如果Data注解和Builder注解一塊使用的話就只會生成全屬性參數(shù)構造函數(shù),不會有默認無參構造函數(shù)。全屬性構造函數(shù)的參數(shù)順序是和類中屬性聲明順序一致的。在把數(shù)據(jù)庫字段映射到實體類的時候發(fā)現(xiàn)實體類沒有默認無參構造函數(shù),就會把數(shù)據(jù)庫中的字段按照全屬性構造函數(shù)參數(shù)的順序依次賦值給實體類的屬性。但如果實體類的屬性定義順序與數(shù)據(jù)庫中字段順序不一致,就會出現(xiàn)賦值錯誤的情況。然后再為字段賦值時調用了set方法 這樣就出現(xiàn)了兩個不同名但同值的屬性。