MyBatis-Plus中@TableField和@TableId說明
一、@TableField(value = “表字段”)
如果表的字段與pojo類的屬性值對應(yīng)不上,就像表字段為user_name,但是屬性的為uName時,在查詢所有中就會報錯,找不到表的字段信息。
java.sql.SQLSyntaxErrorException: Unknown column ‘u_name’ in ‘field list’
就是表的字段和User類沒有對應(yīng)上。
這里就需要加入該注解@TableField(value = “user_name”),解決字段不一致問題(value寫表字段名),使得一一對應(yīng)起來。
@TableField(value = "user_name")
private String uName;
注:
但如果表字段user_name。定義的userName。
駝峰命名會自動識別。不寫注解也可以)
再次運(yùn)行即可解決該問題 如圖所示:

二、@TableField(select = false)
這是用來解決如果用戶名密碼不想顯示時可以在屬性上添加該字段,sql語句就不會去查詢該字段。
這樣在查詢時密碼字段會變成null輸出,保證安全性。
//查詢不顯示用戶密碼
@TableField(select = false)
private String userPassword;
三、@TableField(exist = false)
在添加中,如果User類下的屬性數(shù)據(jù)庫字段沒有,再添加時還會給這個屬性賦值,然后發(fā)送到mapper執(zhí)行插入數(shù)據(jù)操作時就會報錯。
java.sql.SQLSyntaxErrorException: Unknown column ‘hobby’ in ‘field list’
Mybatis-plus忽略表中映射的字段:
Mybatis-plus使用entity和數(shù)據(jù)庫進(jìn)行關(guān)聯(lián)映射,有時候可能有些字段,在當(dāng)前表中不存在,但是操作的時候,又需要進(jìn)行使用,所以有時候就需要進(jìn)行忽略。
具體如何忽略如下:
- @TableField(exist = false):表示該屬性不是表中字段,但又是必須使用的。
- @TableField(exist = true):表示該屬性是表中字段。
執(zhí)行下面的測試方法進(jìn)行測試:
//測試添加方法
@Test
public void testInsert(){
User user=new User();
user.setUserName("哈哈111");
user.setUserEmail("12433");
user.setUserRole("ADMIN");
user.setUserStatus("0");
user.setUserPassword("12344");
// 表中沒有字段
user.setHobby("足球");
//受影響的行數(shù) count
int count = userMapper.insert(user);
if(count>0){//添加成功
//輸出所有數(shù)據(jù)
testSelectList();
}else {//添加失敗
System.out.println("添加失敗~");
}
}
解決該方法:
就要使用 @TableField(exist = false)注解,表示數(shù)據(jù)表中沒有該字段,添加時生成sql代碼就會知道。
//數(shù)據(jù)庫中沒有該字段時需要添加注解 @TableField(exist = false) private String hobby;
四、@TableId(type = IdType.AUTO)補(bǔ)充
這個是通過id查詢時,如果不在id主鍵屬性上添加該注解的話,就會報以下錯誤
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.imust.mp.mapper.UserMapper.selectById
這就表名雖然有屬性和表字段也對應(yīng),但是在通過id查詢時MP不知道這個是主鍵,所以無法執(zhí)行該方法,解決方法就是在屬性上添加@TableId(type = IdType.AUTO),type等于的值有很多,一般主鍵都是用這個。
@TableId(type = IdType.AUTO)
private Integer userId;
查看運(yùn)行效果 如圖所示:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于SSM+Shiro+Bootstrap實(shí)現(xiàn)用戶權(quán)限管理系統(tǒng)
這篇文章主要介紹了基于SSM+Shiro實(shí)現(xiàn)一個用戶權(quán)限管理系統(tǒng),每位用戶只可訪問指定的頁面,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,快跟隨小編一起學(xué)習(xí)吧2021-12-12
Java圖形化界面設(shè)計之布局管理器之BorderLayout案例詳解
這篇文章主要介紹了Java圖形化界面設(shè)計之布局管理器之BorderLayout案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
springcloud實(shí)現(xiàn)注冊中心Eureka
這篇文章主要介紹了springcloud實(shí)現(xiàn)注冊中心Eureka,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
本篇文章主要介紹了詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
SpringCloud?Gateway中GatewayFilterChain執(zhí)行流程詳解
Spring?Cloud?Gateway旨在為微服務(wù)架構(gòu)提供一種簡單有效的、統(tǒng)一的?API?路由管理方式。Spring?Cloud?Gateway?作為?Spring?Cloud?生態(tài)系中的網(wǎng)關(guān),它不僅提供統(tǒng)一的路由方式,并且基于?Filter?鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點(diǎn)和限流等2022-10-10
SpringBoot使用CORS實(shí)現(xiàn)無縫跨域的方法實(shí)現(xiàn)
CORS 是一種在服務(wù)端設(shè)置響應(yīng)頭部信息的機(jī)制,允許特定的源進(jìn)行跨域訪問,本文主要介紹了SpringBoot使用CORS實(shí)現(xiàn)無縫跨域的方法實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-10-10

