mybatis-plus常用注解@TableId和@TableField的用法
1 @TableId
當(dāng)我們用mybatis-plus對數(shù)據(jù)庫進(jìn)行操作時(shí),比如說如下代碼:

可以發(fā)現(xiàn)我們沒有設(shè)置id,但是插入的時(shí)候id卻是能夠自己插入進(jìn)去。但是要是將實(shí)體類字段的id改為uid呢?數(shù)據(jù)庫的字段也改為id,再次執(zhí)行代碼
@Data
public class User {
private Long uid;
private String name;
private Integer age;
private String email;
private SexEnum sex;
@TableLogic
private Integer isDeleted;
}
最后報(bào)錯信息如下:
org.springframework.dao.DataIntegrityViolationException: com.atguigu.mybatisplus.mapper.UserMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Field 'uid' doesn't have a default value
; Field 'uid' doesn't have a default value; nested exception is java.sql.BatchUpdateException: Field 'uid' doesn't have a default value
那如何在不改變字段的情況下,解決這個問題呢?
可以在該字段上加上@TableId

2 @TableId的value屬性
上面說了當(dāng)實(shí)體類和數(shù)據(jù)庫的值都是uid時(shí),需要在實(shí)體類上加上@TableId注解,那么當(dāng)實(shí)體類的字段為id,數(shù)據(jù)庫的字段為uid呢,這樣還可以嗎?我們一試便知。
@TableId private Long id;

報(bào)錯信息如下:
org.springframework.jdbc.BadSqlGrammarException: com.atguigu.mybatisplus.mapper.UserMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Unknown column 'id' in 'field list'
; bad SQL grammar []; nested exception is java.sql.BatchUpdateException: Unknown column 'id' in 'field list'
顯示這是不可以的,但是如果采用了@TableId的value屬性呢,如下:
//注意: 只設(shè)置一個value屬性時(shí),value可以不寫,作用:用于設(shè)置指定主鍵
@TableId("uid")
private Long id;這樣一樣可以插入成功
3 @TableId的type屬性
常用的主鍵策略:
| 值 | 描述 |
| IdType.ASSIGN_ID | 基于雪花算法的策略生成數(shù)據(jù)id,與數(shù)據(jù)庫id是否設(shè)置自增無關(guān) |
| IdType.AUTO | 使用數(shù)據(jù)庫的自增策略,注意:該類型需確保數(shù)據(jù)庫設(shè)置了自增id,否則無效 |
因?yàn)樵谥暗牟迦胫?,發(fā)現(xiàn)id默認(rèn)的就是雪花算法

如果想要使用了數(shù)據(jù)庫的自增策略,需要 設(shè)置IdType.AUTO和數(shù)據(jù)庫設(shè)置自增id。
除此之外,也可以通過全局配置來設(shè)置主鍵生成策略。

注意:@TableId注解是專用于主鍵的注解、@TableField用于其他屬性所對應(yīng)字段不一致的注解。
到此這篇關(guān)于mybatis-plus常用注解@TableId和@TableField的用法的文章就介紹到這了,更多相關(guān)mybatis-plus @TableId @TableField內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- j2ee mybatis注解@Data,@TableName,@TableField使用方式
- 注解@TableName,@TableField,pgsql的模式對應(yīng)方式
- MyBatisPlus中@TableField注解的基本使用
- mybatis?plus框架@TableField注解不生效問題及解決方案
- Java如何獲取@TableField,@TableName注解的值
- MyBatisPlus使用@TableField注解處理默認(rèn)填充時(shí)間的問題
- Mybatis-plus使用注解 @TableField(exist = false)
- @TableField注解之深入理解與應(yīng)用方式
相關(guān)文章
java將數(shù)據(jù)寫入內(nèi)存,磁盤的方法
下面小編就為大家分享一篇java將數(shù)據(jù)寫入內(nèi)存,磁盤的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
SpringBoot項(xiàng)目中如何實(shí)現(xiàn)MySQL讀寫分離詳解
在高并發(fā)下需要對應(yīng)用進(jìn)行讀寫分離,配置多數(shù)據(jù)源,即寫操作走主庫,讀操作則走從庫,主從數(shù)據(jù)庫負(fù)責(zé)各自的讀和寫,緩解了鎖的爭用,提高了讀取性能,這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目中如何實(shí)現(xiàn)MySQL讀寫分離的相關(guān)資料,需要的朋友可以參考下2022-07-07
SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作
驗(yàn)證碼登錄是非常常見的一種登錄方式,能夠簡化用戶登錄的過程,本文主要介紹了SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
全面詳解java代碼重構(gòu)與設(shè)計(jì)模式
這篇文章主要為大家介紹了全面詳解java代碼重構(gòu)與設(shè)計(jì)模式的全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

