MybatisPlus中的刪除和邏輯刪除及區(qū)別介紹
刪除又分為邏輯刪除和物理刪除,那么它們有什么區(qū)別呢?
物理刪除:真實刪除,將對應數(shù)據(jù)從數(shù)據(jù)庫中刪除,之后查詢不到此條被刪除數(shù)據(jù)。
邏輯刪除:假刪除,將對應數(shù)據(jù)中代表是否被刪除字段狀態(tài)修改為“被刪除狀態(tài)”,之后在數(shù)據(jù)庫中仍舊能看到此條數(shù)據(jù)記錄。
在我們日常開發(fā)中,為了保留數(shù)據(jù),經(jīng)常會使用邏輯刪除的方式進行數(shù)據(jù)刪除,下面我們就來看看物理刪除與邏輯刪除怎么實現(xiàn)的吧
首先假設我有這樣一張表

實體類:
package com.atguigu.mybatis_plus.entity;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
// @TableField(fill = FieldFill.UPDATE)
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
userMapper接口:
package com.atguigu.mybatis_plus.mapper;
import com.atguigu.mybatis_plus.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
// 繼承BaseMapper后UserMapper就具有了CRUD功能
public interface UserMapper extends BaseMapper<User>{
}
一、物理刪除
1、根據(jù)id刪除記錄
@Test
public void testLogicDelete() {
int count = userMapper.deleteById(1L); // 刪除id為1的數(shù)據(jù)
System.out.println("受影響的行數(shù)"+count);
}
2、批量刪除
@Test
public void testDeleteBatchIds() {
int result = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4)); // 刪除id為2,3,4的數(shù)據(jù)
System.out.println(result);
}
結果:

物理刪除比較簡單,接下來我們看看邏輯刪除怎么實現(xiàn)吧!
二、邏輯刪除
(1)數(shù)據(jù)庫修改,添加 deleted字段

(2)實體類修改,添加deleted 字段,并加上 @TableLogic 注解
/* 加@TableLogic的情況下,程序內部會將delete語句變?yōu)閡pdate語句 實際上我們寫的代碼并不需要做出什么改變 */ @TableLogic private Integer deleted;
(3)測試
/**
* 邏輯刪除
*/
@Test
public void testLogicDelete() {
int count = userMapper.deleteById(5L);
System.out.println("受影響的行數(shù)"+count);
}
結果:


- 測試后發(fā)現(xiàn),數(shù)據(jù)并沒有被刪除,deleted字段的值由0變成了1
- 測試后分析打印的sql語句,是一條update
- 注意:被刪除前,數(shù)據(jù)的deleted 字段的值必須是 0,才能被選取出來執(zhí)行邏輯刪除的操作
(5)測試邏輯刪除后的查詢,MyBatis Plus中查詢操作也會自動添加邏輯刪除字段的判斷
@Test
public void testSelect() {
List<User> users = userMapper.selectList(null); // 查詢所有記錄
users.forEach(System.out::println); // 遍歷輸出
}
結果:

總結
到此這篇關于MybatisPlus中的刪除和邏輯刪除及區(qū)別介紹的文章就介紹到這了,更多相關MybatisPlus刪除和邏輯刪除內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一篇文章帶你搞定SpringBoot不重啟項目實現(xiàn)修改靜態(tài)資源
這篇文章主要介紹了一篇文章帶你搞定SpringBoot不重啟項目實現(xiàn)修改靜態(tài)資源,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法
這篇文章主要介紹了在CentOS系統(tǒng)中檢測Java安裝及運行jar應用的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06
java(swing)+ mysql實現(xiàn)學生信息管理系統(tǒng)源碼
這篇文章主要分享了java mysql實現(xiàn)學生信息管理系統(tǒng)的源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
SpringBoot用實體接收Get請求傳遞過來的多個參數(shù)的兩種方式
本文主要介紹SpringBoot用實體接收Get請求傳遞過來的多個參數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Spring切面優(yōu)先級與基于xml的AOP實現(xiàn)方法詳解
這篇文章主要介紹了Spring切面的優(yōu)先級與基于xml的AOP的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
基于Springboot+Netty實現(xiàn)rpc的方法 附demo
這篇文章主要介紹了基于Springboot+Netty實現(xiàn)rpc功能,在父項目中引入相關依賴結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02

