@tableid注解_MyBatis-Plus 常用注解

https://blog.csdn.net/weixin_42526068/article/details/113039510


@TableId

主鍵專屬

比如數(shù)據(jù)中的表中的字段是id

但是實(shí)體類是userId

那么就需要在userId上打上這個(gè)注解

用法

設(shè)置主鍵映射 value映射主鍵字段的名字

type 設(shè)置主鍵類型 主鍵的生成策略 (圈起來的重要)

1 數(shù)據(jù)庫自增 AUTO


開發(fā)者無需賦值,自己根據(jù)當(dāng)前表中id最大值自增+1

手動賦值的話還是使用數(shù)據(jù)庫id中最大值+1 的方式賦予id

2 自動生成主鍵 使用雪花算法 NONE

配合新增使用 用的時(shí)候需要注意主鍵長度 但是3.20的時(shí)候是采取該字段最大值+1

1.數(shù)據(jù)類型改int為long


2.數(shù)據(jù)庫表的長度要改

需要注意生成的長度否則會報(bào)錯(cuò)

Caused by: org.apache.ibatis.reflection.ReflectionException:

Could not set property 'id' of 'class com.lin.mybatisplus.pojo.User'

with value '1289924709438889985' Cause: java.lang.IllegalArgumentException:

argument type mismatch

然后還需要修改數(shù)據(jù)類型,才能存進(jìn)去

3 開發(fā)者手動賦值 INPUT

如果插入操作中,沒有對id進(jìn)行賦值,那么存進(jìn)數(shù)據(jù)庫中的將為0(long)

數(shù)據(jù)庫一般會采取自增id的方式處理 當(dāng)前數(shù)據(jù)庫編號的值+1

如果給定值了,就用給定的值

4 ASSIGN_ID

等同于ID_ WORKER(3) ,ID_ WORKER STR(3) 闰渔,

使用mp自動賦值 采取雪花算法,但是3.20的時(shí)候是采取該字段最大值+1

5 ASSIGN_UUID

等同于UUID

要求主鍵類型必須是String類型,會自動生成UUID進(jìn)行賦值

需要考慮數(shù)據(jù)庫的字段設(shè)計(jì),數(shù)據(jù)庫中的int類型的,所以存不進(jìn)去,但因?yàn)橹麈I自增,如果要修改int類型為varchar類型的話,需要去除主鍵自增

@TableField

非主鍵字段使用

比如數(shù)據(jù)中的表中的字段是name

但是實(shí)體類是userName

那么就需要在userName上打上這個(gè)注解

映射非主鍵字段 value映射字段名

exist 表示是否為是數(shù)據(jù)庫字段

在VO DTO的時(shí)候,經(jīng)常會查詢一些數(shù)據(jù)庫中沒有的字段,如果沒有打上標(biāo)簽

那么查詢會報(bào)錯(cuò)(如果實(shí)體類中的成員變臉在數(shù)據(jù)庫中沒有對應(yīng)字段,可以視同)

需要設(shè)置為false

select 表示是否查詢該字段

加上不參與查詢,并且返回null


fill 表示是否自動填充

將對象存入數(shù)據(jù)的時(shí)候,由mybatisplus自動給某些字段賦值

應(yīng)用場景

create_time update_time

比如說注冊的時(shí)間和修改時(shí)間是基本上每個(gè)表都會用到的,實(shí)現(xiàn)起來就是獲取時(shí)間存入,

但是就是煩

那么就交給mp來做 (采取以下配置,并且需要創(chuàng)建處理器)

DEFAULT --默認(rèn)不處理

INSERT --插入時(shí)填充字段(第一次添加的時(shí)候)

INSERT_UPDATE --插入和更新時(shí)填充字段


(最近一次更新的時(shí)候,也就是插入和更新都滿足)

UPDATE --更新時(shí)填充字段

創(chuàng)建自動填充處理器


@Component

public class MyMetaObjectHandler implements MetaObjectHandler? {

? ? /**

? ? * 在插入的時(shí)候響應(yīng)相關(guān)操作

? ? * @param metaObject

? ? */

? ? @Override

? ? public void insertFill(org.apache.ibatis.reflection.MetaObject metaObject) {

/**

* 大意是將當(dāng)前的時(shí)間賦值給字段名? 也就是參數(shù)2 賦值給參數(shù)1 metaObject 可理解為當(dāng)前傳入對象

* 人話:就是給當(dāng)前傳入對象賦值

*/

? ? ? ? setFieldValByName("createTime",new Date(),metaObject);

? ? ? ? setFieldValByName("updateTime",new Date(),metaObject);

? ? }

? ? /**

? ? * 在插入的時(shí)候響應(yīng)相關(guān)操作

? ? * @param metaObject

? ? */

? ? @Override

? ? public void updateFill(org.apache.ibatis.reflection.MetaObject metaObject) {

? ? ? ? setFieldValByName("updateTime",new Date(),metaObject);

? ? }

}

測試

@Version

標(biāo)記樂觀鎖 -主修改操作

-防止數(shù)據(jù)被重復(fù)操作

-防止兩個(gè)線程同時(shí)操作同一個(gè)數(shù)據(jù),保證數(shù)據(jù)的安全性

原理:

標(biāo)記樂觀鎖,通過version字段來保證數(shù)據(jù)的安全性触创,當(dāng)修改數(shù)據(jù)的時(shí)候,

會以version作為條件,當(dāng)條件成立的時(shí)候才會修改成功。

version=1

線程1: update ... set version = 2 where version= 1

線程2: update ... set version = 2 where version= 1

解釋:

隨便一條線程操作成功version 改為2 那么另一條線程就執(zhí)行失敗

環(huán)境搭建:

1.數(shù)據(jù)庫添加version字段 默認(rèn)值1

2.實(shí)體類添加version成員變量 天且添加@version

3.編寫配置類

@Configuration

public class MyBatisPlusConfig {

? ? /**

? ? * @Configuration 加上就是配置類了

? ? *

? ? * @Bean? ? ? ? 返回一個(gè)樂觀鎖攔截器的對象

? ? *

? ? * 大意就是會自動掉一個(gè)方法,然后通bean注解實(shí)例化對線,添加對象到IOC容器中

? ? */

? ? @Bean

? ? public OptimisticLockerInterceptor lockerInterceptor(){

? ? ? ? return new OptimisticLockerInterceptor();

? ? }

}

測試

同時(shí)修改情況 -感興趣的可以試一下

@EnumValue

通用的枚舉類注解,將數(shù)據(jù)庫字段映射成實(shí)體類的枚舉類型成員變量

意識:將枚舉改成成員變量和數(shù)據(jù)庫的字段映射起來,根據(jù)數(shù)據(jù)庫字段的值找到對應(yīng)枚舉的對象

---第一種通過注解的方式

1.數(shù)據(jù)庫添加狀態(tài)字段

2.新建枚舉類

加入字段 -需要注意,一定要和數(shù)據(jù)庫字段映射起

在配置文件中配置枚舉包掃描

測試查詢

----第二種通過實(shí)現(xiàn)接口的方式

插入操作變更

@TableLogic

映射邏輯刪除

————————————————

版權(quán)聲明:本文為CSDN博主「lwieui」的原創(chuàng)文章娘锁,遵循CC 4.0 BY-SA版權(quán)協(xié)議钮莲,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_42526068/article/details/113039510

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袜啃,一起剝皮案震驚了整個(gè)濱河市汗侵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌群发,老刑警劉巖晰韵,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熟妓,居然都是意外死亡雪猪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門起愈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浪蹂,“玉大人,你說我怎么就攤上這事告材±ご危” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵斥赋,是天一觀的道長缰猴。 經(jīng)常有香客問我,道長疤剑,這世上最難降的妖魔是什么滑绒? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮隘膘,結(jié)果婚禮上疑故,老公的妹妹穿的比我還像新娘。我一直安慰自己弯菊,他們只是感情好纵势,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般钦铁。 火紅的嫁衣襯著肌膚如雪软舌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天牛曹,我揣著相機(jī)與錄音佛点,去河邊找鬼。 笑死黎比,一個(gè)胖子當(dāng)著我的面吹牛超营,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阅虫,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼演闭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了书妻?” 一聲冷哼從身側(cè)響起船响,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躬拢,失蹤者是張志新(化名)和其女友劉穎躲履,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聊闯,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡工猜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了菱蔬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篷帅。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拴泌,靈堂內(nèi)的尸體忽然破棺而出魏身,到底是詐尸還是另有隱情,我是刑警寧澤蚪腐,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布箭昵,位于F島的核電站,受9級特大地震影響回季,放射性物質(zhì)發(fā)生泄漏家制。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一泡一、第九天 我趴在偏房一處隱蔽的房頂上張望颤殴。 院中可真熱鬧,春花似錦鼻忠、人聲如沸涵但。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤笆。三九已至蝇棉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芥永,已是汗流浹背篡殷。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埋涧,地道東北人板辽。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像棘催,于是被迫代替她去往敵國和親劲弦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容