1. 程式人生 > 程式設計 >解決Mybatis查詢方法selectById()主鍵不一致問題

解決Mybatis查詢方法selectById()主鍵不一致問題

Mybatis-plus的通用mapper為我們封裝了很多方法,我們只需要將interface整合BaseMapper就可以。在BaseMapper中分裝了一個方法=》selectById()

selectById

這個方法是根據主鍵id進行查詢記錄的。返回一條記錄。測試如下,

解決Mybatis查詢方法selectById()主鍵不一致問題

最終呼叫的是這個方法userDiamondMapper這個介面集成了BaseMapper。

解決Mybatis查詢方法selectById()主鍵不一致問題

注意這個表的主鍵就是uid,查詢試試

解決Mybatis查詢方法selectById()主鍵不一致問題

返回結果不如我們預期,打印出的SQL很奇怪,並沒有解析正確。猜測是因為無法正確解析出主鍵。

改一下,使用註解標記一下主鍵

解決Mybatis查詢方法selectById()主鍵不一致問題

使用@TableId註解標記主鍵id為uid,重試下

解決Mybatis查詢方法selectById()主鍵不一致問題

這次終於正確了

注意:selectById方法預設使用的主鍵名是id,資料庫表中如果主鍵id名稱不一樣需要手動指定

補充知識:MyBatis-Plus 踩坑 ,getById查詢無效

使用AutoGenerator(AutoGenerator 是 MyBatis-Plus 的程式碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模組的程式碼)生成程式碼後,在Controller中使用Service的getById()進行查詢,返回的物件居然是null

問題出在Entity上,由於我資料表的id欄位名為id且int型別,自動生成的id欄位名serialVersionUID且型別為long型別,與資料庫表對不上號。

使用getById(id)查詢自然為null

因為entity生成出來的主鍵沒注意到是不符合資料表的

所以解決方法是,把主鍵改成資料表對應的:把主鍵id欄位名改回id,且資料型別設定int

@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("board_parent")
public class Parent extends BaseEntity {
 
  //private static final long serialVersionUID = 1L; 
  private int id;
 
  @NotEmpty(message = "父論壇名不能為空!")
  private String name;
 
  @NotNull(message = "管理員ID不能為空!")
  private Integer adminId; 
  public LocalDateTime createdDate; 
  public LocalDateTime updateDate; 
  public Integer state;
}

以上這篇解決Mybatis查詢方法selectById()主鍵不一致問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。