mybatis-plus常用注解@TableId和@TableField的用法
1 @TableId
當我們用mybatis-plus對數(shù)據(jù)庫進行操作時,比如說如下代碼:
可以發(fā)現(xiàn)我們沒有設置id,但是插入的時候id卻是能夠自己插入進去。但是要是將實體類字段的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; }
最后報錯信息如下:
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屬性
上面說了當實體類和數(shù)據(jù)庫的值都是uid時,需要在實體類上加上@TableId注解,那么當實體類的字段為id,數(shù)據(jù)庫的字段為uid呢,這樣還可以嗎?我們一試便知。
@TableId private Long id;
報錯信息如下:
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屬性呢,如下:
//注意: 只設置一個value屬性時,value可以不寫,作用:用于設置指定主鍵 @TableId("uid") private Long id;
這樣一樣可以插入成功
3 @TableId的type屬性
常用的主鍵策略:
值 | 描述 |
IdType.ASSIGN_ID | 基于雪花算法的策略生成數(shù)據(jù)id,與數(shù)據(jù)庫id是否設置自增無關 |
IdType.AUTO | 使用數(shù)據(jù)庫的自增策略,注意:該類型需確保數(shù)據(jù)庫設置了自增id,否則無效 |
因為在之前的插入中,發(fā)現(xiàn)id默認的就是雪花算法
如果想要使用了數(shù)據(jù)庫的自增策略,需要 設置IdType.AUTO和數(shù)據(jù)庫設置自增id。
除此之外,也可以通過全局配置來設置主鍵生成策略。
注意:@TableId注解是專用于主鍵的注解、@TableField用于其他屬性所對應字段不一致的注解。
到此這篇關于mybatis-plus常用注解@TableId和@TableField的用法的文章就介紹到這了,更多相關mybatis-plus @TableId @TableField內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
dubbo將異常轉換成RuntimeException的原因分析?ExceptionFilter
這篇文章主要介紹了dubbo將異常轉換成RuntimeException的原因分析?ExceptionFilter問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03SpringBoot項目加入沖突動態(tài)監(jiān)測算法的實現(xiàn)
沖突動態(tài)監(jiān)測算法是一種網(wǎng)絡通信中的沖突檢測方法,適用于無線網(wǎng)絡或其他共享傳輸介質的環(huán)境,本文主要介紹了SpringBoot項目加入沖突動態(tài)監(jiān)測算法的實現(xiàn),感興趣的可以了解一下2023-09-09Java遞歸調用如何實現(xiàn)數(shù)字的逆序輸出方式
這篇文章主要介紹了Java遞歸調用如何實現(xiàn)數(shù)字的逆序輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼
本篇文章主要介紹了RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-09-09