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

MyBatis-Plus邏輯刪除實(shí)現(xiàn)過程

 更新時(shí)間:2025年12月06日 14:09:01   作者:drebander  
本文介紹了MyBatis-Plus如何實(shí)現(xiàn)邏輯刪除功能,包括自動(dòng)填充字段、配置與實(shí)現(xiàn)步驟、常見應(yīng)用場景,并展示了如何使用remove方法進(jìn)行邏輯刪除,邏輯刪除通過修改字段值來標(biāo)記數(shù)據(jù)為刪除狀態(tài),保留數(shù)據(jù)歷史記錄,避免數(shù)據(jù)丟失

在很多企業(yè)級(jí)應(yīng)用中,數(shù)據(jù)刪除操作通常采用 邏輯刪除 的方式,而不是物理刪除。邏輯刪除指的是通過更新字段(例如 is_deletedstatus)來標(biāo)記數(shù)據(jù)為刪除狀態(tài),而不是真的從數(shù)據(jù)庫中刪除記錄。這樣做的好處是保留數(shù)據(jù)的歷史記錄,方便后續(xù)的數(shù)據(jù)恢復(fù)、審計(jì)以及統(tǒng)計(jì)。

MyBatis-Plus(MP)提供了強(qiáng)大的 邏輯刪除功能,使得開發(fā)者可以快速實(shí)現(xiàn)這一功能。本文將介紹 MyBatis-Plus 如何實(shí)現(xiàn)邏輯刪除,包括自動(dòng)填充字段、配置與實(shí)現(xiàn)步驟、常見應(yīng)用場景,并展示如何使用 remove 方法進(jìn)行邏輯刪除,而不是手動(dòng)通過 update 來修改刪除標(biāo)記。

1. 邏輯刪除的必要性

1.1 邏輯刪除的定義

邏輯刪除 是指通過修改某個(gè)字段(如 is_deleted)的值,將記錄標(biāo)記為已刪除,而不是將其從數(shù)據(jù)庫中刪除。

這種方式不僅保留了數(shù)據(jù)的完整性,還能避免因誤操作導(dǎo)致的數(shù)據(jù)丟失。

1.2 邏輯刪除的優(yōu)點(diǎn)

  • 數(shù)據(jù)恢復(fù):可以在數(shù)據(jù)標(biāo)記為刪除后,依然保留數(shù)據(jù),便于后期的恢復(fù)。
  • 歷史審計(jì):可以查看被刪除記錄的歷史數(shù)據(jù),滿足合規(guī)性要求。
  • 避免數(shù)據(jù)丟失:比物理刪除更安全,可以減少誤操作帶來的影響。

1.3 適用場景

  • 用戶賬號(hào)刪除:用戶刪除賬戶時(shí),使用邏輯刪除標(biāo)記賬戶為已刪除,便于后續(xù)恢復(fù)。
  • 訂單或產(chǎn)品狀態(tài)管理:刪除訂單或產(chǎn)品記錄時(shí),使用邏輯刪除來標(biāo)記記錄而非物理刪除。
  • 內(nèi)容管理系統(tǒng)(CMS):在 CMS 中刪除文章或評(píng)論時(shí),使用邏輯刪除來保留數(shù)據(jù)。

2. MyBatis-Plus 支持的邏輯刪除方式

MyBatis-Plus 提供了非常方便的方式來實(shí)現(xiàn)邏輯刪除,主要依賴于 @TableLogic 注解,標(biāo)記字段為邏輯刪除字段。MyBatis-Plus 會(huì)自動(dòng)處理該字段的值,并在查詢時(shí)自動(dòng)排除已刪除的記錄。

2.1 使用@TableLogic注解進(jìn)行邏輯刪除

MyBatis-Plus 提供的 @TableLogic 注解可以標(biāo)識(shí)一個(gè)字段為邏輯刪除字段。默認(rèn)情況下,字段值為 0 表示未刪除,值為 1 表示已刪除。

示例:User實(shí)體類配置

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

public class User {

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

    private String name;
    private Integer age;

    @TableLogic  // 邏輯刪除字段
    private Integer isDeleted;

    // Getters and Setters
}

在這個(gè)示例中:

  • @TableLogic:標(biāo)識(shí) isDeleted 字段為邏輯刪除字段。字段值為 0 表示未刪除,值為 1 表示已刪除。

2.2 配置邏輯刪除字段的值

MyBatis-Plus 默認(rèn)將 isDeleted 字段值為 0 表示未刪除,1 表示已刪除。開發(fā)者可以自定義邏輯刪除的字段值。

自定義邏輯刪除值

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {
        return properties -> {
            properties.getGlobalConfig().setLogicDeleteValue("1");  // 設(shè)置邏輯刪除的值為 1
            properties.getGlobalConfig().setLogicNotDeleteValue("0");  // 設(shè)置未刪除的值為 0
        };
    }
}

在這個(gè)配置中,設(shè)置了邏輯刪除字段的值為 1 表示已刪除,0 表示未刪除。

3. 使用remove方法進(jìn)行邏輯刪除

3.1remove方法與邏輯刪除

MyBatis-Plus 中的 remove 方法用于刪除記錄,默認(rèn)情況下會(huì)執(zhí)行物理刪除操作。

為了啟用 邏輯刪除,需要通過設(shè)置 @TableLogic 注解,并在執(zhí)行刪除操作時(shí),MyBatis-Plus 會(huì)自動(dòng)更新 isDeleted 字段的值,而不是直接刪除記錄。

示例:remove方法進(jìn)行邏輯刪除

public void logicDeleteUser(Long userId) {
    userService.removeById(userId);  // 使用 remove 方法進(jìn)行邏輯刪除
}

在這個(gè)例子中,removeById 方法會(huì)自動(dòng)更新 isDeleted 字段,而不是直接從數(shù)據(jù)庫中刪除記錄。

3.2removeById的原理

removeById 方法的實(shí)現(xiàn)是基于 @TableLogic 注解的字段,通過更新 isDeleted 字段的值來實(shí)現(xiàn)邏輯刪除。

MyBatis-Plus 在執(zhí)行刪除操作時(shí),會(huì)自動(dòng)生成如下 SQL:

UPDATE user SET is_deleted = 1 WHERE id = ?;

該操作將 is_deleted 字段的值更新為 1,表示該記錄已被刪除,而不是從數(shù)據(jù)庫中刪除該記錄。

3.3 查詢時(shí)排除邏輯刪除的記錄

MyBatis-Plus 默認(rèn)會(huì)在查詢時(shí)自動(dòng)排除邏輯刪除的記錄,即 isDeleted 字段為 1 的記錄不會(huì)被返回。

查詢時(shí)的自動(dòng)排除

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John");
List<User> users = userService.list(queryWrapper);  // 自動(dòng)排除邏輯刪除的記錄

在這個(gè)查詢中,MyBatis-Plus 會(huì)自動(dòng)忽略 isDeleted = 1 的記錄,只返回未刪除的記錄。

4. 示例:邏輯刪除字段與查詢

4.1 插入數(shù)據(jù)時(shí)的邏輯刪除

在插入數(shù)據(jù)時(shí),isDeleted 字段會(huì)默認(rèn)設(shè)置為 0,表示數(shù)據(jù)未刪除。

User user = new User();
user.setName("John");
user.setAge(30);
userService.save(user);  // 插入時(shí),isDeleted 默認(rèn)為 0

4.2 更新數(shù)據(jù)時(shí)的邏輯刪除

在更新數(shù)據(jù)時(shí),可以通過 removeById 方法將某條記錄的 isDeleted 字段更新為 1,表示數(shù)據(jù)已被邏輯刪除。

User user = userService.getById(1L);
user.setIsDeleted(1);  // 設(shè)置為已刪除
userService.updateById(user);  // 執(zhí)行更新操作,實(shí)際是邏輯刪除

4.3 查詢時(shí)排除邏輯刪除的數(shù)據(jù)

查詢時(shí),MyBatis-Plus 會(huì)自動(dòng)過濾掉邏輯刪除的記錄。你無需顯式地排除已刪除記錄。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John");
List<User> users = userService.list(queryWrapper);  // 自動(dòng)排除邏輯刪除的記錄

4.4 查詢已刪除的記錄

如果需要查詢已刪除的記錄,可以通過 QueryWrapper 手動(dòng)指定查詢條件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_deleted", 1);  // 查詢已刪除的記錄
List<User> deletedUsers = userService.list(queryWrapper);

5. 總結(jié)

  • 邏輯刪除的必要性:邏輯刪除可以保留數(shù)據(jù)歷史,避免數(shù)據(jù)丟失,適用于需要審計(jì)、數(shù)據(jù)恢復(fù)的場景。
  • MyBatis-Plus 支持的邏輯刪除方式:通過 @TableLogic 注解,MyBatis-Plus 能夠在插入、更新和查詢時(shí)自動(dòng)處理邏輯刪除字段。
  • 實(shí)現(xiàn)步驟:在實(shí)體類中使用 @TableLogic 注解標(biāo)識(shí)邏輯刪除字段,配置自定義刪除值,并實(shí)現(xiàn) MetaObjectHandler 來處理字段填充。
  • 使用 remove 方法進(jìn)行邏輯刪除:MyBatis-Plus 的 removeById 方法會(huì)自動(dòng)更新 isDeleted 字段,實(shí)現(xiàn)邏輯刪除,而不是物理刪除數(shù)據(jù)。

MyBatis-Plus 的邏輯刪除功能簡化了數(shù)據(jù)的刪除操作,保留了刪除記錄的歷史數(shù)據(jù),確保了應(yīng)用的數(shù)據(jù)一致性和安全性。通過合理配置和使用 MyBatis-Plus 的邏輯刪除功能,開發(fā)者能夠更加高效地管理數(shù)據(jù),并滿足業(yè)務(wù)需求。

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

相關(guān)文章

  • SpringBoot或SpringAI對(duì)接DeepSeek大模型的詳細(xì)步驟

    SpringBoot或SpringAI對(duì)接DeepSeek大模型的詳細(xì)步驟

    這篇文章主要介紹了DeepSeek智能助手的使用方法和步驟,包括引入庫、配置環(huán)境變量和配置,文章詳細(xì)描述了流式請(qǐng)求和非流式請(qǐng)求的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2025-02-02
  • 一文詳解Spring攔截鏈的實(shí)現(xiàn)原理

    一文詳解Spring攔截鏈的實(shí)現(xiàn)原理

    在?Web應(yīng)用開發(fā)中,攔截器(Interceptor)是一種非常重要的機(jī)制,能夠在請(qǐng)求處理的各個(gè)階段進(jìn)行前置和后置處理,本文主要來探討一下?Spring?攔截鏈的實(shí)現(xiàn)原理,需要的可以了解下
    2025-01-01
  • SpringBoot整合mybatis的方法詳解

    SpringBoot整合mybatis的方法詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合mybatis的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解

    JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解

    這篇文章主要介紹了JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能的實(shí)例代碼,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-05-05
  • SpringBoot之自定義banner使用代碼實(shí)例

    SpringBoot之自定義banner使用代碼實(shí)例

    這篇文章主要介紹了SpringBoot之自定義banner使用代碼實(shí)例,在Spring Boot中,你可以通過定制Banner來個(gè)性化你的應(yīng)用程序啟動(dòng)時(shí)的輸出,Banner是一個(gè)在應(yīng)用程序啟動(dòng)時(shí)顯示的ASCII藝術(shù)字形式的標(biāo)志,用于增加應(yīng)用程序的識(shí)別度和個(gè)性化,需要的朋友可以參考下
    2024-01-01
  • 消息隊(duì)列 RabbitMQ 與 Spring 整合使用的實(shí)例代碼

    消息隊(duì)列 RabbitMQ 與 Spring 整合使用的實(shí)例代碼

    本篇文章主要介紹了消息隊(duì)列 RabbitMQ 與 Spring 整合使用的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 關(guān)于thymeleaf判斷對(duì)象是否為空的相關(guān)邏輯處理

    關(guān)于thymeleaf判斷對(duì)象是否為空的相關(guān)邏輯處理

    這篇文章主要介紹了關(guān)于thymeleaf判斷對(duì)象是否為空的相關(guān)邏輯處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • common-upload上傳文件功能封裝類分享

    common-upload上傳文件功能封裝類分享

    本文介紹一個(gè)common-upload上傳封裝類,為了更方便的上傳文件,對(duì)common-upload進(jìn)行了一個(gè)簡單的封裝,大家參考使用吧
    2014-01-01
  • Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決

    Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決

    這篇文章主要介紹了Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringMVC中的攔截器詳解及代碼示例

    SpringMVC中的攔截器詳解及代碼示例

    這篇文章主要介紹了SpringMVC中的攔截器詳解及代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

江门市| 日土县| 杭州市| 个旧市| 沿河| 噶尔县| 宜兰市| 建昌县| 历史| 青浦区| 运城市| 淅川县| 温宿县| 遂平县| 碌曲县| 习水县| 定兴县| 车险| 河津市| 旌德县| 桦南县| 尼玛县| 南川市| 漳平市| 中方县| 林州市| 清水河县| 曲麻莱县| 万载县| 芮城县| 南岸区| 永福县| 建平县| 北流市| 高青县| 丰都县| 嘉荫县| 子洲县| 南宁市| 始兴县| 白玉县|