Java開發學習(四十五)----MyBatisPlus查詢語句之映射匹配兼容性

1、映射匹配兼容性

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

之所以數據能夠成功的從表中獲取並封裝到模型對象中,原因是表的字段列名和模型類的屬性名一樣。那麼問題就來了:

問題1:表字段與編碼屬性設計不同步

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

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

問題2:編碼中添加了數據庫中未定義的屬性

當模型類中多了一個數據庫表不存在的字段,就會導致生成的sql語句中在select的時候查詢了數據庫不存在的字段,程序運行就會報錯,錯誤信息爲:

Unknown column '多出來的字段名稱' in 'field list'

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

問題3:採用默認查詢開放了更多的字段查看權限

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

知識點1:@TableField

名稱 @TableField
類型 屬性註解
位置 模型類屬性定義上方
作用 設置當前屬性對應的數據庫表中的字段關係
相關屬性 value(默認):設置數據庫表字段名稱 exist:設置屬性在數據庫表字段中是否存在,默認爲true,此屬性不能與value合併使用 select:設置屬性是否參與查詢,此屬性與select()映射配置不衝突

問題4:表名與編碼開發設計不同步

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

Table 'databaseName.tableName' doesn't exist,翻譯過來就是數據庫中的表不存在。

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

知識點2:@TableName

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章