首頁 > 軟體

MyBatisPlus深入探究對映匹配的相容性

2022-08-18 18:03:57

對映匹配相容性

前面我們已經能從表中查詢出資料,並將資料封裝到模型類中,這整個過程涉及到一張表和一個模型類:

之所以資料能夠成功的從表中獲取並封裝到模型物件中,原因是表的欄位列名和模型類的屬性名一樣。

那麼問題就來了:

  • 問題1:表欄位與編碼屬性設計不同步

當表的列名和模型類的屬性名發生不一致,就會導致資料封裝不到模型物件,這個時候就需要其中一方做出修改,那如果前提是兩邊都不能改又該如何解決?

MP給我們提供了一個註解@TableField,使用該註解可以實現模型類屬性名和表的列名之間的對映關係

  • 問題2:編碼中新增了資料庫中未定義的屬性

當模型類中多了一個資料庫表不存在的欄位,就會導致生成的sql語句中在select的時候查詢了資料庫不存在的欄位,程式執行就會報錯,錯誤資訊為:

Unknown column ‘多出來的欄位名稱’ in ‘field list’

具體的解決方案用到的還是@TableField註解,它有一個屬性叫exist,設定該欄位是否在資料庫表中存在,如果設定為false則不存在,生成sql語句查詢的時候,就不會再查詢該欄位了。

  • 問題3:採用預設查詢開放了更多的欄位檢視許可權

查詢表中所有的列的資料,就可能把一些敏感資料查詢到返回給前端,這個時候我們就需要限制哪些欄位預設不要進行查詢。解決方案是@TableField註解的一個屬性叫select,該屬性設定預設是否需要查詢該欄位的值,true(預設值)表示預設查詢該欄位,false表示預設不查詢該欄位。

知識點@TableField

名稱@TableField
型別屬性註解
位置模型類屬性定義上方
作用設定當前屬性對應的資料庫表中的欄位關係
相關屬性value(預設):設定資料庫表欄位名稱
exist:設定屬性在資料庫表欄位中是否存在,預設為true,此屬性不能與value合併使用
select:設定屬性是否參與查詢,此屬性與select()對映設定不衝突
  • 問題4:表名與編碼開發設計不同步

該問題主要是表的名稱和模型類的名稱不一致,導致查詢失敗,這個時候通常會報如下錯誤資訊:

Table ‘databaseName.tableNaem’ doesn’t exist,翻譯過來就是資料庫中的表不存在。

解決方案是使用MP提供的另外一個註解@TableName來設定表與模型類之間的對應關係。

知識點@TableName

名稱@TableName
型別類註解
位置模型類定義上方
作用設定當前類對應於資料庫表關係
相關屬性value(預設):設定資料庫表名稱

程式碼演示

接下來我們使用案例的方式把剛才的知識演示下:

步驟1:修改資料庫表user為tbl_user

直接查詢會報錯,原因是MP預設情況下會使用模型類的類名首字母小寫當表名使用。

步驟2:模型類新增@TableName註解

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
}

步驟3:將欄位password修改成pwd

直接查詢會報錯,原因是MP預設情況下會使用模型類的屬性名當做表的列名使用

步驟4:使用@TableField對映關係

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    @TableField(value="pwd")
    private String password;
    private Integer age;
    private String tel;
}

步驟5:新增一個資料庫表不存在的欄位

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    @TableField(value="pwd")
    private String password;
    private Integer age;
    private String tel;
    private Integer online;
}

直接查詢會報錯,原因是MP預設情況下會查詢模型類的所有屬性對應的資料庫表的列,而online不存在

步驟6:使用@TableField排除欄位

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    @TableField(value="pwd")
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist=false)
    private Integer online;
}

步驟7:查詢時將pwd隱藏

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    @TableField(value="pwd",select=false)
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist=false)
    private Integer online;
}

到此這篇關於MyBatisPlus深入探究對映匹配的相容性的文章就介紹到這了,更多相關MyBatis對映匹配內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com