MybatisPlus中的刪除和邏輯刪除及區(qū)別介紹
刪除又分為邏輯刪除和物理刪除,那么它們有什么區(qū)別呢?
物理刪除:真實(shí)刪除,將對(duì)應(yīng)數(shù)據(jù)從數(shù)據(jù)庫(kù)中刪除,之后查詢不到此條被刪除數(shù)據(jù)。
邏輯刪除:假刪除,將對(duì)應(yīng)數(shù)據(jù)中代表是否被刪除字段狀態(tài)修改為“被刪除狀態(tài)”,之后在數(shù)據(jù)庫(kù)中仍舊能看到此條數(shù)據(jù)記錄。
在我們?nèi)粘i_(kāi)發(fā)中,為了保留數(shù)據(jù),經(jīng)常會(huì)使用邏輯刪除的方式進(jìn)行數(shù)據(jù)刪除,下面我們就來(lái)看看物理刪除與邏輯刪除怎么實(shí)現(xiàn)的吧
首先假設(shè)我有這樣一張表
實(shí)體類:
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); }
結(jié)果:
物理刪除比較簡(jiǎn)單,接下來(lái)我們看看邏輯刪除怎么實(shí)現(xiàn)吧!
二、邏輯刪除
(1)數(shù)據(jù)庫(kù)修改,添加 deleted字段
(2)實(shí)體類修改,添加deleted 字段,并加上 @TableLogic 注解
/* 加@TableLogic的情況下,程序內(nèi)部會(huì)將delete語(yǔ)句變?yōu)閡pdate語(yǔ)句 實(shí)際上我們寫(xiě)的代碼并不需要做出什么改變 */ @TableLogic private Integer deleted;
(3)測(cè)試
/** * 邏輯刪除 */ @Test public void testLogicDelete() { int count = userMapper.deleteById(5L); System.out.println("受影響的行數(shù)"+count); }
結(jié)果:
- 測(cè)試后發(fā)現(xiàn),數(shù)據(jù)并沒(méi)有被刪除,deleted字段的值由0變成了1
- 測(cè)試后分析打印的sql語(yǔ)句,是一條update
- 注意:被刪除前,數(shù)據(jù)的deleted 字段的值必須是 0,才能被選取出來(lái)執(zhí)行邏輯刪除的操作
(5)測(cè)試邏輯刪除后的查詢,MyBatis Plus中查詢操作也會(huì)自動(dòng)添加邏輯刪除字段的判斷
@Test public void testSelect() { List<User> users = userMapper.selectList(null); // 查詢所有記錄 users.forEach(System.out::println); // 遍歷輸出 }
結(jié)果:
總結(jié)
到此這篇關(guān)于MybatisPlus中的刪除和邏輯刪除及區(qū)別介紹的文章就介紹到這了,更多相關(guān)MybatisPlus刪除和邏輯刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MybatisX無(wú)法自動(dòng)生成entity實(shí)體類的解決方法
本文主要介紹了MybatisX無(wú)法自動(dòng)生成entity實(shí)體類的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Java使用@EnableEurekaServer實(shí)現(xiàn)自動(dòng)裝配詳解
這篇文章主要介紹了Java使用@EnableEurekaServer實(shí)現(xiàn)自動(dòng)裝配過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10Spring注解驅(qū)動(dòng)之BeanFactoryPostProcessor原理解析
這篇文章主要介紹了Spring注解驅(qū)動(dòng)之BeanFactoryPostProcessor原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Java中的HttpServletRequestWrapper用法解析
這篇文章主要介紹了Java中的HttpServletRequestWrapper用法解析,HttpServletRequest 對(duì)參數(shù)值的獲取實(shí)際調(diào)的是org.apache.catalina.connector.Request,沒(méi)有提供對(duì)應(yīng)的set方法修改屬性,所以不能對(duì)前端傳來(lái)的參數(shù)進(jìn)行修改,需要的朋友可以參考下2024-01-01Java實(shí)現(xiàn)的簡(jiǎn)單網(wǎng)頁(yè)截屏功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單網(wǎng)頁(yè)截屏功能,涉及java網(wǎng)頁(yè)打開(kāi)及屏幕截圖功能相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Java之String、StringBuffer、StringBuilder的區(qū)別分析
今天搞安卓在看書(shū)的時(shí)候遇到了StringBuilder這個(gè)類型的東東,有點(diǎn)小迷,不知道它跟string、stringbuffer的關(guān)系式怎么樣的,趕快查閱相關(guān)資料,了解了個(gè)大概,拿出來(lái)分享一下2012-11-11