中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatisPlus映射匹配的兼容性實例代碼分析

發布時間:2022-08-26 15:27:33 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

這篇“MyBatisPlus映射匹配的兼容性實例代碼分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MyBatisPlus映射匹配的兼容性實例代碼分析”文章吧。

映射匹配兼容性

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

MyBatisPlus映射匹配的兼容性實例代碼分析

之所以數據能夠成功的從表中獲取并封裝到模型對象中,原因是表的字段列名和模型類的屬性名一樣。

那么問題就來了:

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

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

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

MyBatisPlus映射匹配的兼容性實例代碼分析

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

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

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

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

MyBatisPlus映射匹配的兼容性實例代碼分析

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

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

MyBatisPlus映射匹配的兼容性實例代碼分析

知識點@TableField

名稱@TableField
類型屬性注解
位置模型類屬性定義上方
作用設置當前屬性對應的數據庫表中的字段關系
相關屬性value(默認):設置數據庫表字段名稱
exist:設置屬性在數據庫表字段中是否存在,默認為true,此屬性不能與value合并使用
select:設置屬性是否參與查詢,此屬性與select()映射配置不沖突
  • 問題4:表名與編碼開發設計不同步

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

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

MyBatisPlus映射匹配的兼容性實例代碼分析

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

MyBatisPlus映射匹配的兼容性實例代碼分析

知識點@TableName

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

代碼演示

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

步驟1:修改數據庫表user為tbl_user

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

MyBatisPlus映射匹配的兼容性實例代碼分析

步驟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默認情況下會使用模型類的屬性名當做表的列名使用

MyBatisPlus映射匹配的兼容性實例代碼分析

步驟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不存在

MyBatisPlus映射匹配的兼容性實例代碼分析

步驟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映射匹配的兼容性實例代碼分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

哈巴河县| 偃师市| 淳化县| 明溪县| 资中县| 崇阳县| 沂源县| 竹山县| 瑞昌市| 新乐市| 新兴县| 和龙市| 凤台县| 禄丰县| 丰城市| 阿克陶县| 沅江市| 长宁区| 弥勒县| 灵宝市| 屏东县| 丰顺县| 北京市| 莲花县| 阳谷县| 吉隆县| 赞皇县| 休宁县| 临湘市| 招远市| 三门峡市| 保靖县| 亚东县| 苍溪县| 红桥区| 鄂托克旗| 宣城市| 松阳县| 大洼县| 高清| 阳朔县|