Mybatis plus無介紹快使用搂擦,注解的使用(四)

問題背景

因為mybatis plus非常的流行稳诚,雖然平常mybatis generator也夠用了,但多會一個盾饮,看別人的代碼就輕松一點
注意事項:

Mybatis-plus無介紹快使用衔蹲,CRUD增刪改查基本使用附源碼(一)

Mybatis-plus無介紹快使用,自定義sql語句CRUD增刪改查附源碼(二)

Mybatis-plus無介紹快使用呈础,自帶封裝service層的使用附源碼(三)

Mybatis-plus無介紹快使用舆驶,注解的使用(四)

Mybatis-plus無介紹快使用,Wrapper條件構(gòu)造器的使用附源碼(五)

Mybatis-plus無介紹快使用而钞,分頁插件和樂觀鎖插件的使用附源碼(六)

Mybatis-plus無介紹快使用沙廉,枚舉變量的使用附源碼(七)

Mybatis-plus無介紹快使用,多數(shù)據(jù)源的使用(八)

Mybatis-plus無介紹快使用臼节,MybatisX自動生成代碼插件的使用(九)

Mybatis-plus無介紹快使用撬陵,可繼承通用的基礎(chǔ)實體類(十)

注解的使用

MyBatis-Plus提供的注解可以幫我們解決一些數(shù)據(jù)庫與實體之間相互映射的問題。

1.@TableName

經(jīng)過以上的測試网缝,在使用MyBatis-Plus實現(xiàn)基本的CRUD時巨税,我們并沒有指定要操作的表,只是在Mapper接口繼承BaseMapper時粉臊,設(shè)置了泛型User草添,而操作的表為user表,由此得出結(jié)論扼仲,MyBatis-Plus在確定操作的表時远寸,由BaseMapper的泛型決定,即實體類型決定屠凶,且默認操作的表名和實體類型的類名一致驰后。

1.1 引出問題

若實體類類型的類名和要操作的表的表名不一致,會出現(xiàn)什么問題阅畴?

  • 我們將表user更名為t_user倡怎,測試查詢功能
  • 程序拋出異常迅耘,Table 'mybatis_plus.user' doesn't exist贱枣,因為現(xiàn)在的表名為t_user监署,而默認操作的表名和實體類型的類名一致,即user

1.2 解決問題

a纽哥、使用注解解決問題

在實體類類型上添加@TableName("t_user")钠乏,標(biāo)識實體類對應(yīng)的表,即可成功執(zhí)行SQL語句

@Data
@TableName("t_user")
public class User {
 private Long id;
 private String name;
 private Integer age;
 private String email;
}

b春塌、使用全局配置解決問題

在開發(fā)的過程中晓避,我們經(jīng)常遇到以上的問題,即實體類所對應(yīng)的表都有固定的前綴只壳,例如 t_tbl_ 此時俏拱,可以使用MyBatis-Plus提供的全局配置,為實體類所對應(yīng)的表名設(shè)置默認的前綴吼句,那么就不需要在每個實體類上通過@TableName標(biāo)識實體類對應(yīng)的表

mybatis-plus:
  global-config:
    db-config:
      # 設(shè)置實體類所對應(yīng)的表的統(tǒng)一前綴
      table-prefix: t_

2.@TableId

經(jīng)過以上的測試锅必,MyBatis-Plus在實現(xiàn)CRUD時,會默認將id作為主鍵列惕艳,并在插入數(shù)據(jù)時搞隐,默認基于雪花算法的策略生成id

2.1 引出問題

若實體類和表中表示主鍵的不是id,而是其他字段远搪,例如uid劣纲,MyBatis-Plus會自動識別uid為主鍵列嗎?

  • 我們實體類中的屬性id改為uid谁鳍,將表中的字段id也改為uid癞季,測試添加功能
  • 程序拋出異常,Field 'uid' doesn't have a default value棠耕,說明MyBatis-Plus沒有將uid作為主鍵賦值

2.2 解決問題

在實體類中uid屬性上通過@TableId將其標(biāo)識為主鍵余佛,即可成功執(zhí)行SQL語句

@Date
public class User {
 @TableId
 private Long uid;
 private String name;
 private Integer age;
 private String email;
}

2.3 @TableId的value屬性

若實體類中主鍵對應(yīng)的屬性為id,而表中表示主鍵的字段為uid窍荧,此時若只在屬性id上添加注解@TableId辉巡,則拋出異常Unknown column 'id' in 'field list',即MyBatis-Plus仍然會將id作為表的主鍵操作蕊退,而表中表示主鍵的是字段uid此時需要通過@TableId注解的value屬性郊楣,指定表中的主鍵字段,@TableId("uid")@TableId(value="uid")

2.4 @TableId的type屬性

type屬性用來定義主鍵策略:默認雪花算法

常用的主鍵策略:

描述
IdType.ASSIGN_ID(默認) 基于雪花算法的策略生成數(shù)據(jù)id瓤荔,與數(shù)據(jù)庫id是否設(shè)置自增無關(guān)
IdType.AUTO 使用數(shù)據(jù)庫的自增策略净蚤,注意,該類型請確保數(shù)據(jù)庫設(shè)置了id自增输硝,

配置全局主鍵策略:

#MyBatis-Plus相關(guān)配置
mybatis-plus:
  configuration:
    #配置日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      #配置mp的主鍵策略為自增
      id-type: auto
      # 設(shè)置實體類所對應(yīng)的表的統(tǒng)一前綴
      table-prefix: t_

或者java

    @TableId(type = IdType.AUTO)
    private Long id;

3.@TbaleField

經(jīng)過以上的測試今瀑,我們可以發(fā)現(xiàn),MyBatis-Plus在執(zhí)行SQL語句時,要保證實體類中的屬性名和表中的字段名一致
如果實體類中的屬性名和字段名不一致的情況橘荠,會出現(xiàn)什么問題呢屿附?

3.1 情況一

若實體類中的屬性使用的是駝峰命名風(fēng)格,而表中的字段使用的是下劃線命名風(fēng)格

例如實體類屬性userName哥童,表中字段user_name

此時MyBatis-Plus會自動將下劃線命名風(fēng)格轉(zhuǎn)化為駝峰命名風(fēng)格

相當(dāng)于在MyBatis中配置

3.2 情況二

若實體類中的屬性和表中的字段不滿足情況1
例如實體類屬性name挺份,表中字段username
此時需要在實體類屬性上使用@TableField("username")設(shè)置屬性所對應(yīng)的字段名

public class User {
    @TableId("uid")
    private Long id;
    @TableField("username")
    private String name;
    private Integer age;
    private String email;
}

4.@TableLogic

4.1 邏輯刪除

物理刪除:真實刪除,將對應(yīng)數(shù)據(jù)從數(shù)據(jù)庫中刪除贮懈,之后查詢不到此條被刪除的數(shù)據(jù)
邏輯刪除:假刪除匀泊,將對應(yīng)數(shù)據(jù)中代表是否被刪除字段的狀態(tài)修改為“被刪除狀態(tài)”,之后在數(shù)據(jù)庫中仍舊能看到此條數(shù)據(jù)記錄
使用場景:可以進行數(shù)據(jù)恢復(fù)

4.2 實現(xiàn)邏輯刪除

  • 數(shù)據(jù)庫中創(chuàng)建邏輯刪除狀態(tài)列朵你,設(shè)置默認值為0
  • 實體類中添加邏輯刪除屬性
  • 測試刪除功能各聘,真正執(zhí)行的是修改
public void testDeleteById(){
    int result = userMapper.deleteById(1527472864163348482L);
    System.out.println(result > 0 ? "刪除成功!" : "刪除失斅找健伦吠!");
    System.out.println("受影響的行數(shù)為:" + result);
}
![](https://upload-images.jianshu.io/upload_images/24315796-95474be8e478a010.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 此時執(zhí)行查詢方法,查詢的結(jié)果為自動添加條件is_deleted=0




作為程序員第 152 篇文章魂拦,每次寫一句歌詞記錄一下毛仪,看看人生有幾首歌的時間,wahahaha ...

Lyric: 草原上兩只敵對野牛

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芯勘,一起剝皮案震驚了整個濱河市箱靴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荷愕,老刑警劉巖衡怀,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異安疗,居然都是意外死亡抛杨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門荐类,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怖现,“玉大人,你說我怎么就攤上這事玉罐∏停” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵吊输,是天一觀的道長饶号。 經(jīng)常有香客問我,道長季蚂,這世上最難降的妖魔是什么茫船? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任琅束,我火速辦了婚禮,結(jié)果婚禮上算谈,老公的妹妹穿的比我還像新娘狰闪。我一直安慰自己,他們只是感情好濒生,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幔欧,像睡著了一般罪治。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上礁蔗,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天觉义,我揣著相機與錄音,去河邊找鬼浴井。 笑死晒骇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磺浙。 我是一名探鬼主播洪囤,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撕氧!你這毒婦竟也來了瘤缩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伦泥,失蹤者是張志新(化名)和其女友劉穎剥啤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不脯,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡府怯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了防楷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺丙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖复局,靈堂內(nèi)的尸體忽然破棺而出赘被,到底是詐尸還是另有隱情,我是刑警寧澤肖揣,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布民假,位于F島的核電站,受9級特大地震影響龙优,放射性物質(zhì)發(fā)生泄漏羊异。R本人自食惡果不足惜事秀,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望野舶。 院中可真熱鬧易迹,春花似錦、人聲如沸平道。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽一屋。三九已至窘疮,卻和暖如春嘱巾,著一層夾襖步出監(jiān)牢的瞬間胖烛,已是汗流浹背彼哼。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工蜀变, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绪杏,地道東北人挺举。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓汹粤,卻偏偏與公主長得像箩做,于是被迫代替她去往敵國和親虫腋。 傳聞我的和親對象是個殘疾皇子骄酗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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