解決Mybatis查詢方法selectById()主鍵不一致問題
Mybatis-plus的通用mapper為我們封裝了很多方法,我們只需要將interface整合BaseMapper就可以。在BaseMapper中分裝了一個方法=》selectById()
selectById
這個方法是根據主鍵id進行查詢記錄的。返回一條記錄。測試如下,
最終呼叫的是這個方法userDiamondMapper這個介面集成了BaseMapper。
注意這個表的主鍵就是uid,查詢試試
返回結果不如我們預期,打印出的SQL很奇怪,並沒有解析正確。猜測是因為無法正確解析出主鍵。
改一下,使用註解標記一下主鍵
使用@TableId註解標記主鍵id為uid,重試下
這次終於正確了
注意: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()主鍵不一致問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。