MyBatis-Plus中的邏輯刪除功能及實例分析
MyBatis-Plus中的邏輯刪除功能及實例
介紹:
- 在實際開發(fā)中,數(shù)據(jù)的刪除操作是一個常見需求。
- MyBatis-Plus提供了方便且靈活的邏輯刪除功能,可以簡化開發(fā)人員在刪除數(shù)據(jù)時的操作。
案例背景
假設(shè)我們有一個博客系統(tǒng),包含Blog類作為博客實體。在這個系統(tǒng)中,我們希望能夠?qū)Σ┛瓦M(jìn)行軟刪除操作,即將要刪除的博客標(biāo)記為已刪除狀態(tài),而不是直接物理刪除。
通過邏輯刪除,我們可以保留刪除記錄,有助于追蹤數(shù)據(jù)變更歷史和實現(xiàn)審計需求。
使用邏輯刪除功能
配置數(shù)據(jù)庫和實體類
首先,在使用邏輯刪除功能之前,我們需要進(jìn)行相關(guān)的配置。
- 在數(shù)據(jù)庫表中,我們需要添加一個用于表示邏輯刪除狀態(tài)的字段。例如,我們可以添加一個名為
deleted的tinyint類型字段,默認(rèn)值為0。 - 在實體類(這里是Blog類)中,我們使用Lombok來減少getter和setter方法的編寫工作。
以下是一個示例:
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("blog")
public class Blog {
private Long id;
private String title;
private String content;
@TableLogic
private Integer deleted;
}在上述示例中,我們使用@Data注解簡化了getter和setter方法的編寫,并使用@TableName注解標(biāo)記了實體類對應(yīng)的數(shù)據(jù)庫表名。同時,使用@TableLogic注解標(biāo)記了deleted字段為邏輯刪除字段。
執(zhí)行邏輯刪除操作
接下來,我們將演示如何在MyBatis-Plus中使用邏輯刪除功能。
方式一:局部配置
局部配置適用于只需要在某個Mapper接口中應(yīng)用邏輯刪除功能的情況。
首先,在Mapper接口中添加@Repository注解并繼承BaseMapper接口,例如:
import org.springframework.stereotype.Repository;
@Repository
public interface BlogMapper extends BaseMapper<Blog> {
}然后,在Service層的實現(xiàn)類中進(jìn)行邏輯刪除的調(diào)用:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements BlogService {
@Override
public boolean deleteBlogById(Long id) {
return baseMapper.deleteById(id) > 0;
}
}在上述示例中,我們直接調(diào)用baseMapper的deleteById方法進(jìn)行邏輯刪除操作。MyBatis-Plus會自動將邏輯刪除字段設(shè)置為1(表示已刪除)。
方式二:全局配置
全局配置適用于對整個項目中的所有Mapper接口都應(yīng)用邏輯刪除功能的情況。
首先,在application.yml或application.properties文件中配置全局屬性:
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0然后,設(shè)置全局配置項并在Mapper接口中使用@TableLogic注解:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加樂觀鎖插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}在上述示例中,我們創(chuàng)建了一個@Configuration類,并注冊了Mybatis-Plus提供的分頁插件(PaginationInterceptor)和樂觀鎖插件(OptimisticLockerInnerInterceptor)。這些插件可以根據(jù)具體需求進(jìn)行配置。
測試
為了驗證邏輯刪除功能是否正常工作,我們可以編寫單元測試。
以下是一個簡單的測試實例:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BlogServiceTest {
@Autowired
private BlogService blogService;
@Test
public void testDeleteBlog() {
Long blogId = 1L; // 假設(shè)要刪除ID為1的博客
boolean result = blogService.deleteBlogById(blogId);
System.out.println("Delete successful: " + result);
}
}在上述測試中,我們注入了BlogService接口,并調(diào)用deleteBlogById方法來執(zhí)行邏輯刪除操作。
通過編寫和運行這些測試用例,我們可以驗證使用邏輯刪除功能時的正常性。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?hystrix斷路器與局部降級全面介紹
什么是服務(wù)降級?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實際業(yè)務(wù)情況及流量,對一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運作或高效運作2022-10-10
SpringMVC配置多個properties文件之通配符解析
這篇文章主要介紹了SpringMVC配置多個properties文件之通配符解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java日常練習(xí)題,每天進(jìn)步一點點(20)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
Java進(jìn)階學(xué)習(xí):jar打包詳解
Java進(jìn)階學(xué)習(xí):jar打包詳解...2006-12-12
從Springfox到SpringDoc OpenAPI的完整遷移指南
在SpringBoot項目中,API文檔是前后端協(xié)作的重要橋梁,長期以來,Springfox一直是Java生態(tài)中最流行的API文檔工具之一,但隨著SpringBoot版本的迭代,特別是2.6+版本后,Springfox的兼容性問題逐漸顯現(xiàn),所以本文介紹了從Springfox到SpringDoc OpenAPI的完整遷移指南2025-08-08
Spring MVC的優(yōu)點與核心接口_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Spring MVC的優(yōu)點與核心接口,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08

