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)錯(cuò)信息如下:
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
那如何在不改變字段的情況下,解決這個(gè)問題呢?
可以在該字段上加上@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)錯(cuò)信息如下:
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è)置一個(gè)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í)現(xiàn)方式
在Java中緩存是一種常用的性能優(yōu)化技術(shù),用于在應(yīng)用程序中加速訪問和查詢數(shù)據(jù)的速度,下面這篇文章主要給大家介紹了關(guān)于Java本地高性能緩存的幾種常見實(shí)現(xiàn)方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter
這篇文章主要介紹了dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Spring-webflux?響應(yīng)式編程的實(shí)例詳解
Spring 提供了兩個(gè)并行堆棧,一種是基于帶有 Spring MVC 和 Spring Data 結(jié)構(gòu)的 Servlet API,另一個(gè)是完全反應(yīng)式堆棧,它利用了 Spring WebFlux 和 Spring Data 的反應(yīng)式存儲庫,這篇文章主要介紹了Spring-webflux?響應(yīng)式編程,需要的朋友可以參考下2022-09-09JAVA應(yīng)用系統(tǒng)工具快捷托盤實(shí)例代碼
JAVA應(yīng)用系統(tǒng)工具快捷托盤實(shí)例代碼,需要的朋友可以參考一下2013-02-02SpringBoot項(xiàng)目加入沖突動(dòng)態(tài)監(jiān)測算法的實(shí)現(xiàn)
沖突動(dòng)態(tài)監(jiān)測算法是一種網(wǎng)絡(luò)通信中的沖突檢測方法,適用于無線網(wǎng)絡(luò)或其他共享傳輸介質(zhì)的環(huán)境,本文主要介紹了SpringBoot項(xiàng)目加入沖突動(dòng)態(tài)監(jiān)測算法的實(shí)現(xiàn),感興趣的可以了解一下2023-09-09Java遞歸調(diào)用如何實(shí)現(xiàn)數(shù)字的逆序輸出方式
這篇文章主要介紹了Java遞歸調(diào)用如何實(shí)現(xiàn)數(shù)字的逆序輸出方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04詳解在Spring中如何自動(dòng)創(chuàng)建代理
這篇文章主要介紹了詳解在Spring中如何自動(dòng)創(chuàng)建代理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼
本篇文章主要介紹了RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09