mybatis-plus實現(xiàn)邏輯刪除的示例代碼
一、什么是邏輯刪除?
邏輯刪除的本質(zhì)是修改操作,并不是真正的刪除,而是在表中將對應的是否刪除標識(del_flag)做修改操作。比如0是未刪除,1是刪除。在邏輯上數(shù)據(jù)是被刪除的,但數(shù)據(jù)本身依然存在庫中。
邏輯刪除sql語句為:
update user set del_flag=1 where id = 1 and del_flag=0
這種設計,后端每次向數(shù)據(jù)庫查詢數(shù)據(jù)時,只查del_flag=0(未刪除)的數(shù)據(jù)。拿上面sql舉例,那么客戶端進行查詢id為1的信息,服務器就不會提供信息。
查詢sql為:
select id,name,del_flag from user where del_flag=0
二、為什么使用邏輯刪除?
- 方便數(shù)據(jù)恢復,保護數(shù)據(jù)本身的價值。
- 保證數(shù)據(jù)連續(xù)性,對主鍵的影響可能會導致底層B+樹重建,而 delete 和 update id 都會影響主鍵。
事實上,在大多數(shù)公司里,都會采用邏輯刪除的方式,因為數(shù)據(jù)的價值更大,被刪除的數(shù)據(jù)也非常有記錄價值,這樣的操作也并不會提高太多的操作難度。
三、在springboot使用Mybatis-Plus提供的邏輯刪除
字段類型支持說明:支持所有數(shù)據(jù)類型(推薦使用 Integer,Boolean,LocalDateTime)
如果數(shù)據(jù)庫字段使用datetime,邏輯未刪除值和已刪除值支持配置為字符串null,另一個值支持配置為函數(shù)來獲取值如now()
3.1、在application.yml配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局邏輯刪除的實體字段名(since 3.3.0,配置后可以忽略不配置步驟2)
logic-delete-value: 1 # 邏輯已刪除值(默認為 1)
logic-not-delete-value: 0 # 邏輯未刪除值(默認為 0)3.2、實體類字段上加上@TableLogic注解
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
/**
* 用戶訂單
*
* @author yunyan
*/
@TableName("t_user")
@Data
public class UserPO implements Serializable {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 用戶名
*/
private String userName;
/**
* 密碼
*/
private String password;
/**
* 昵稱
*/
private String nickName;
/**
* 刪除標識
*/
@TableLogic
private Integer delFlag;3.3、演示

3.4、UserMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.testinterface.entity.po.UserPO;
import org.apache.ibatis.annotations.Mapper;
/**
* 用戶映射器
*
* @author yunyan
*/
@Mapper
public interface UserMapper extends BaseMapper<UserPO> {
}3.5、IUserService
/**
* 用戶服務
*
* @author yunyan
*/
public interface IUserService extends IService<UserPO> {
}3.6、UserServiceImpl
/**
* 用戶服務impl
*
* @author yunyan
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements IUserService {
}
3.7、controller
@RequestMapping("/open/del")
public ResultUtil del(UserParam userParam){
UserPO one = userService.getOne(new LambdaQueryWrapper<UserPO>()
.eq(UserPO::getUserName, userParam.getUserName()));
boolean b = userService.removeById(one);
System.out.println(b);
return ResultUtil.success(b);
}3.8、ResultUtil
@Data
public class ResultUtil {
private String code;
private String message;
private Object data;
public static ResultUtil success(Object data){
ResultUtil resultUtil = new ResultUtil();
resultUtil.setCode("200");
resultUtil.setMessage("請求成功");
resultUtil.setData(data);
return resultUtil;
}
}3.9、瀏覽器請求

3.10、數(shù)據(jù)庫的數(shù)據(jù)
可以看到,加了@TableLogic注解的字段對應的數(shù)據(jù)庫字段,由0(未刪除)改為1(已刪除)

到此這篇關于mybatis-plus實現(xiàn)邏輯刪除的示例代碼的文章就介紹到這了,更多相關mybatis-plus 邏輯刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MyBatis的xml中字符串類型判空與非字符串類型判空處理方式(最新整理)
本文給大家介紹MyBatis的xml中字符串類型判空與非字符串類型判空處理方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-08-08
Spring Boot環(huán)境屬性占位符解析及類型轉換詳解
這篇文章主要給大家介紹了關于Spring Boot環(huán)境屬性占位符解析及類型轉換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-08-08

