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

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

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

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

接下來要講解是刪除中比較重要的一個操作,邏輯刪除,先來分析下問題:

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

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

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

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

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

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

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

對于刪除操作業(yè)務(wù)問題來說有:

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

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

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

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

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

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

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

@Data
//@TableName("tbl_user") 可以不寫是因?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);
    }
}

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

思考

邏輯刪除,對查詢有沒有影響呢?

執(zhí)行查詢操作

@SpringBootTest
class Mybatisplus03DqlApplicationTests {

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

運(yùn)行測試,會發(fā)現(xiàn)打印出來的sql語句中會多一個查詢條件,如:

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

如果還是想把已經(jīng)刪除的數(shù)據(jù)都查詢出來該如何實(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();
}

如果每個表都要有邏輯刪除,那么就需要在每個模型類的屬性上添加@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ù)時也會自動帶上邏輯刪除字段。

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

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

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

知識點(diǎn):@TableLogic

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

總結(jié)

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

相關(guān)文章

  • MyBatis批量插入的五種方式

    MyBatis批量插入的五種方式

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

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

    要從PLC讀取數(shù)據(jù),Java本身并不直接支持PLC的通信協(xié)議,所以你需要借助一些中間件或庫來實(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定時任務(wù)Scheduled重復(fù)執(zhí)行操作

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

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

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

    這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • JAVA時間類型轉(zhuǎn)換處理方式

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

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

    Spring Boot配置AOP打印日志的全過程

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

最新評論

林州市| 宁波市| 教育| 辽中县| 宽甸| 张家界市| 绩溪县| 旬阳县| 乌鲁木齐县| 南康市| 芜湖县| 河南省| 台北市| 利津县| 嘉峪关市| 三都| 东乌珠穆沁旗| 德兴市| 沅陵县| 长沙市| 新蔡县| 益阳市| 奇台县| 湟源县| 潜山县| 唐海县| 临武县| 大城县| 凤山县| 太原市| 定结县| 勃利县| 封开县| 攀枝花市| 厦门市| 达州市| 密云县| 莱西市| 耒阳市| 贵定县| 化隆|