最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MybatisPlus使用@TableLogic實(shí)現(xiàn)邏輯刪除過(guò)程

 更新時(shí)間:2024年05月30日 10:07:25   作者:Masked5  
這篇文章主要介紹了MybatisPlus使用@TableLogic實(shí)現(xiàn)邏輯刪除過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用@TableLogic實(shí)現(xiàn)邏輯刪除

接下來(lái)要講解是刪除中比較重要的一個(gè)操作,邏輯刪除,先來(lái)分析下問(wèn)題:

這是一個(gè)員工和其所簽的合同表,關(guān)系是一個(gè)員工可以簽多個(gè)合同,是一個(gè)一(員工)對(duì)多(合同)的表

員工ID為1的張業(yè)績(jī),總共簽了三個(gè)合同,如果此時(shí)他離職了,我們需要將員工表中的數(shù)據(jù)進(jìn)行刪除,會(huì)執(zhí)行delete操作

如果表在設(shè)計(jì)的時(shí)候有主外鍵關(guān)系,那么同時(shí)也得將合同表中的前三條數(shù)據(jù)也刪除掉

后期要統(tǒng)計(jì)所簽合同的總金額,就會(huì)發(fā)現(xiàn)對(duì)不上,原因是已經(jīng)將員工1簽的合同信息刪除掉了

如果只刪除員工不刪除合同表數(shù)據(jù),那么合同的員工編號(hào)對(duì)應(yīng)的員工信息不存在,那么就會(huì)出現(xiàn)垃圾數(shù)據(jù),就會(huì)出現(xiàn)無(wú)主合同,根本不知道有張業(yè)績(jī)這個(gè)人的存在

所以經(jīng)過(guò)分析,我們不應(yīng)該將表中的數(shù)據(jù)刪除掉,而是需要進(jìn)行保留,但是又得把離職的人和在職的人進(jìn)行區(qū)分,這樣就解決了上述問(wèn)題,如:

區(qū)分的方式,就是在員工表中添加一列數(shù)據(jù)deleted,如果為0說(shuō)明在職員工,如果離職則將其改完1,(0和1所代表的含義是可以自定義的)

對(duì)于刪除操作業(yè)務(wù)問(wèn)題來(lái)說(shuō)有:

  • 物理刪除:業(yè)務(wù)數(shù)據(jù)從數(shù)據(jù)庫(kù)中丟棄,執(zhí)行的是delete操作
  • 邏輯刪除:為數(shù)據(jù)設(shè)置是否可用狀態(tài)字段,刪除時(shí)設(shè)置狀態(tài)字段為不可用狀態(tài),數(shù)據(jù)保留在數(shù)據(jù)庫(kù)中,執(zhí)行的是update操作

MybatisPlus中邏輯刪除具體該如何實(shí)現(xiàn)

步驟1:修改數(shù)據(jù)庫(kù)表添加deleted列

字段名可以任意,內(nèi)容也可以自定義,比如0代表正常,1代表刪除,可以在添加列的同時(shí)設(shè)置其默認(rèn)值為0正常。

步驟2:實(shí)體類添加屬性

(1)添加與數(shù)據(jù)庫(kù)表的列對(duì)應(yīng)的一個(gè)屬性名,名稱可以任意,如果和數(shù)據(jù)表列名對(duì)不上,可以使用@TableField進(jìn)行關(guān)系映射,如果一致,則會(huì)自動(dòng)對(duì)應(yīng)。

(2)標(biāo)識(shí)新增的字段為邏輯刪除字段,使用@TableLogic

@Data
//@TableName("tbl_user") 可以不寫(xiě)是因?yàn)榕渲昧巳峙渲?
public class User {
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String name;
    @TableField(value="pwd",select=false)
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist=false)
    private Integer online;
    @TableLogic(value="0",delval="1")
    //value為正常數(shù)據(jù)的值,delval為刪除數(shù)據(jù)的值
    private Integer deleted;
}

步驟3:運(yùn)行刪除方法

@SpringBootTest
class Mybatisplus03DqlApplicationTests {

    @Autowired
    private UserDao userDao;
	
    @Test
    void testDelete(){
       userDao.deleteById(1L);
    }
}

從測(cè)試結(jié)果來(lái)看,邏輯刪除最后走的是update操作,會(huì)將指定的字段修改成刪除狀態(tài)對(duì)應(yīng)的值。

思考

邏輯刪除,對(duì)查詢有沒(méi)有影響呢?

執(zhí)行查詢操作

@SpringBootTest
class Mybatisplus03DqlApplicationTests {

    @Autowired
    private UserDao userDao;
	
    @Test
    void testFind(){
       System.out.println(userDao.selectList(null));
    }
}

運(yùn)行測(cè)試,會(huì)發(fā)現(xiàn)打印出來(lái)的sql語(yǔ)句中會(huì)多一個(gè)查詢條件,如:

可想而知,MP的邏輯刪除會(huì)將所有的查詢都添加一個(gè)未被刪除的條件,也就是已經(jīng)被刪除的數(shù)據(jù)是不應(yīng)該被查詢出來(lái)的。

如果還是想把已經(jīng)刪除的數(shù)據(jù)都查詢出來(lái)該如何實(shí)現(xiàn)呢?

@Mapper
public interface UserDao extends BaseMapper<User> {
    //查詢所有數(shù)據(jù)包含已經(jīng)被刪除的數(shù)據(jù)
    @Select("select * from tbl_user")
    public List<User> selectAll();
}

如果每個(gè)表都要有邏輯刪除,那么就需要在每個(gè)模型類的屬性上添加@TableLogic注解,如何優(yōu)化?

在配置文件中添加全局配置,如下:

mybatis-plus:
  global-config:
    db-config:
      # 邏輯刪除字段名
      logic-delete-field: deleted
      # 邏輯刪除字面值:未刪除為0
      logic-not-delete-value: 0
      # 邏輯刪除字面值:刪除為1
      logic-delete-value: 1

介紹完邏輯刪除,邏輯刪除的本質(zhì)為:

邏輯刪除的本質(zhì)其實(shí)是修改操作。如果加了邏輯刪除字段,查詢數(shù)據(jù)時(shí)也會(huì)自動(dòng)帶上邏輯刪除字段。

執(zhí)行的SQL語(yǔ)句為:

UPDATE tbl_user SET deleted=1 where id = ? AND deleted=0

執(zhí)行數(shù)據(jù)結(jié)果為:

知識(shí)點(diǎn):@TableLogic

名稱@TableLogic
類型屬性注解
位置模型類中用于表示刪除字段的屬性定義上方
作用標(biāo)識(shí)該字段為進(jìn)行邏輯刪除的字段
相關(guān)屬性value:邏輯未刪除值delval: 邏輯刪除值

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis批量插入的五種方式

    MyBatis批量插入的五種方式

    這篇文章主要介紹了MyBatis批量插入的五種方式,每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)從PLC讀取數(shù)據(jù)的常見(jiàn)主流且可行方案

    Java實(shí)現(xiàn)從PLC讀取數(shù)據(jù)的常見(jiàn)主流且可行方案

    要從PLC讀取數(shù)據(jù),Java本身并不直接支持PLC的通信協(xié)議,所以你需要借助一些中間件或庫(kù)來(lái)實(shí)現(xiàn),以下是幾種主流且可行的方案,大家可以根據(jù)自己的需要進(jìn)行選擇
    2026-03-03
  • ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作

    ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作

    這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 如何在Mac上安裝并配置JDK環(huán)境變量詳細(xì)步驟

    如何在Mac上安裝并配置JDK環(huán)境變量詳細(xì)步驟

    這篇文章主要介紹了如何在Mac上安裝并配置JDK環(huán)境變量詳細(xì)步驟,包括下載JDK、安裝JDK、配置環(huán)境變量、驗(yàn)證JDK配置以及可選地設(shè)置PowerShell為默認(rèn)終端,需要的朋友可以參考下
    2025-04-04
  • Java定義泛型方法實(shí)例分析

    Java定義泛型方法實(shí)例分析

    這篇文章主要介紹了Java定義泛型方法,結(jié)合實(shí)例形式分析了java定義泛型的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作

    Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作

    這篇文章主要介紹了Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理

    SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解SpringBoot自動(dòng)配置原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    這篇文章主要介紹了Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • JAVA時(shí)間類型轉(zhuǎn)換處理方式

    JAVA時(shí)間類型轉(zhuǎn)換處理方式

    本文詳細(xì)介紹了Java中LocalDate與Date類型之間的轉(zhuǎn)換方法,以及字符串格式化與解析技巧,同時(shí),還涵蓋了LocalDateTime和LocalTime與Date類型的轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Spring Boot配置AOP打印日志的全過(guò)程

    Spring Boot配置AOP打印日志的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于Spring Boot配置AOP打印日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

桓台县| 武平县| 赤水市| 盐边县| 台南县| 谷城县| 城固县| 海南省| 溧阳市| 华蓥市| 华池县| 仁化县| 五峰| 通海县| 广德县| 深圳市| 平南县| 崇礼县| 杭锦后旗| 濮阳县| 营山县| 鹤峰县| 田林县| 桂平市| 台前县| 寻乌县| 尤溪县| 肇州县| 林口县| 恭城| 侯马市| 青川县| 利辛县| 德化县| 宁城县| 安顺市| 晋州市| 股票| 伊金霍洛旗| 金山区| 伊通|