您好,登錄后才能下訂單哦!
這篇“MyBatisPlus映射匹配的兼容性實例代碼分析”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MyBatisPlus映射匹配的兼容性實例代碼分析”文章吧。
前面我們已經(jīng)能從表中查詢出數(shù)據(jù),并將數(shù)據(jù)封裝到模型類中,這整個過程涉及到一張表和一個模型類:
之所以數(shù)據(jù)能夠成功的從表中獲取并封裝到模型對象中,原因是表的字段列名和模型類的屬性名一樣。
那么問題就來了:
問題1:表字段與編碼屬性設(shè)計不同步
當表的列名和模型類的屬性名發(fā)生不一致,就會導(dǎo)致數(shù)據(jù)封裝不到模型對象,這個時候就需要其中一方做出修改,那如果前提是兩邊都不能改又該如何解決?
MP給我們提供了一個注解@TableField
,使用該注解可以實現(xiàn)模型類屬性名和表的列名之間的映射關(guān)系
問題2:編碼中添加了數(shù)據(jù)庫中未定義的屬性
當模型類中多了一個數(shù)據(jù)庫表不存在的字段,就會導(dǎo)致生成的sql語句中在select的時候查詢了數(shù)據(jù)庫不存在的字段,程序運行就會報錯,錯誤信息為:
Unknown column ‘多出來的字段名稱’ in ‘field list’
具體的解決方案用到的還是@TableField
注解,它有一個屬性叫exist
,設(shè)置該字段是否在數(shù)據(jù)庫表中存在,如果設(shè)置為false則不存在,生成sql語句查詢的時候,就不會再查詢該字段了。
問題3:采用默認查詢開放了更多的字段查看權(quán)限
查詢表中所有的列的數(shù)據(jù),就可能把一些敏感數(shù)據(jù)查詢到返回給前端,這個時候我們就需要限制哪些字段默認不要進行查詢。解決方案是@TableField
注解的一個屬性叫select
,該屬性設(shè)置默認是否需要查詢該字段的值,true(默認值)表示默認查詢該字段,false表示默認不查詢該字段。
名稱 | @TableField |
---|---|
類型 | 屬性注解 |
位置 | 模型類屬性定義上方 |
作用 | 設(shè)置當前屬性對應(yīng)的數(shù)據(jù)庫表中的字段關(guān)系 |
相關(guān)屬性 | value(默認):設(shè)置數(shù)據(jù)庫表字段名稱 exist:設(shè)置屬性在數(shù)據(jù)庫表字段中是否存在,默認為true,此屬性不能與value合并使用 select:設(shè)置屬性是否參與查詢,此屬性與select()映射配置不沖突 |
問題4:表名與編碼開發(fā)設(shè)計不同步
該問題主要是表的名稱和模型類的名稱不一致,導(dǎo)致查詢失敗,這個時候通常會報如下錯誤信息:
Table ‘databaseName.tableNaem’ doesn’t exist,翻譯過來就是數(shù)據(jù)庫中的表不存在。
解決方案是使用MP提供的另外一個注解@TableName
來設(shè)置表與模型類之間的對應(yīng)關(guān)系。
名稱 | @TableName |
---|---|
類型 | 類注解 |
位置 | 模型類定義上方 |
作用 | 設(shè)置當前類對應(yīng)于數(shù)據(jù)庫表關(guān)系 |
相關(guān)屬性 | value(默認):設(shè)置數(shù)據(jù)庫表名稱 |
接下來我們使用案例的方式把剛才的知識演示下:
步驟1:修改數(shù)據(jù)庫表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映射關(guān)系
@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:添加一個數(shù)據(jù)庫表不存在的字段
@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默認情況下會查詢模型類的所有屬性對應(yīng)的數(shù)據(jù)庫表的列,而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; }
以上就是關(guān)于“MyBatisPlus映射匹配的兼容性實例代碼分析”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。