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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)
這篇文章主要介紹了解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01servlet之cookie簡介_動力節(jié)點Java學院整理
Cookie技術誕生以來,它就成了廣大網(wǎng)絡用戶和Web開發(fā)人員爭論的一個焦點。下面這篇文章主要給大家介紹了關于servlet之cookie簡介的相關資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07JAVA使用前綴樹(Tire樹)實現(xiàn)敏感詞過濾、詞典搜索
本文主要介紹了JAVA使用前綴樹(Tire樹)實現(xiàn)敏感詞過濾、詞典搜索,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01