mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
什么是邏輯刪除?
邏輯刪除的本質(zhì)是修改操作,并不是真正的刪除,而是在表中將對(duì)應(yīng)的是否刪除標(biāo)識(shí)(delete_flag)做修改操作。比如0是未刪除,1是刪除。在邏輯上數(shù)據(jù)是被刪除的,但數(shù)據(jù)本身依然存在庫(kù)中。
邏輯刪除sql語(yǔ)句為:
update user set deleted=1 where id = 1 and deleted=0
這種設(shè)計(jì),后端每次向數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)時(shí),只查deleted=0(未刪除)的數(shù)據(jù)。拿上面sql舉例,那么客戶端進(jìn)行查詢(xún)id為1的信息,服務(wù)器就不會(huì)提供信息。
查詢(xún)sql為:
select id,name,deleted from user where deleted=0
為什么用到邏輯刪除?
比如:在一家銷(xiāo)售公司中,有兩個(gè)員工在一月份離職了,后臺(tái)管理人員在辦離職時(shí),如果直接將數(shù)據(jù)庫(kù)中與這兩個(gè)員工相關(guān)的信息刪除了,那么當(dāng)經(jīng)理想要看一月份的銷(xiāo)售記錄的時(shí)候,只能看到部分銷(xiāo)售記錄,銷(xiāo)售金額對(duì)不上。這種情況肯定是不允許發(fā)生的
如下圖:
本來(lái)一月總共銷(xiāo)售了17,000,00元,結(jié)果刪除后只剩下了5,000,00。
只需要在員工工號(hào)后面加delete_flag字段,用于標(biāo)記是否被刪除即可。
在springboot使用Mybatis-Plus提供的邏輯刪除
字段類(lèi)型支持說(shuō)明:
支持所有數(shù)據(jù)類(lèi)型(推薦使用 Integer,Boolean,LocalDateTime)
如果數(shù)據(jù)庫(kù)字段使用datetime,邏輯未刪除值和已刪除值支持配置為字符串null,另一個(gè)值支持配置為函數(shù)來(lái)獲取值如now()
1、在application.yml配置
mybatis-plus: global-config: db-config: logic-delete-field: flag # 全局邏輯刪除的實(shí)體字段名(since 3.3.0,配置后可以忽略不配置步驟2) logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1) logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)
2、 實(shí)體類(lèi)字段上加上@TableLogic注解
@Data public class UserPO implements Serializable { @TableId(type = IdType.ASSIGN_ID) private Long id; private String userName; private String password; private String nickName; @TableLogic private int delFlag; }
演示
數(shù)據(jù)庫(kù)t_user表中數(shù)據(jù):
UserPOMapper:
@Mapper public interface UserPOMapper extends BaseMapper<UserPO> { }
IUserService:
public interface IUserService extends IService<UserPO> { }
IUserServiceImpl:
@Service public class IUserServiceImpl extends ServiceImpl<UserPOMapper, UserPO> implements IUserService { }
Controller:
@RequestMapping("/open/del") public ResultUtil del(UserParam userParam){ UserPO one = iUserService.getOne(new LambdaQueryWrapper<UserPO>() .eq(UserPO::getUserName, userParam.getUserName())); boolean b = iUserService.removeById(one); System.out.println(b); return ResultUtil.success(b); }
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("請(qǐng)求成功"); resultUtil.setData(data); return resultUtil; } }
瀏覽器請(qǐng)求:
數(shù)據(jù)庫(kù)t_user表中數(shù)據(jù):
可以看到,加了@TableLogic注解的字段對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段,由0(未刪除)改為1(已刪除)
到此這篇關(guān)于mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼的文章就介紹到這了,更多相關(guān)mybatis-plus 邏輯刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用Springfox?Swagger實(shí)現(xiàn)API自動(dòng)生成單元測(cè)試
Springfox是一個(gè)使用Java語(yǔ)言開(kāi)發(fā)開(kāi)源的API Doc的框架,它的前身是swagger-springmvc,可以將我們的Controller中的方法以文檔的形式展現(xiàn),這篇文章主要介紹了如何使用Springfox?Swagger實(shí)現(xiàn)API自動(dòng)生成單元測(cè)試,感興趣的朋友跟隨小編一起看看吧2024-04-04Java14對(duì)于NullPointerException的新處理方式示例解析
這篇文章主要為大家介紹了Java14對(duì)于NullPointerException的新處理方式示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09java中讀寫(xiě)Properties屬性文件公用方法詳解
在項(xiàng)目開(kāi)發(fā)中我們會(huì)將很多環(huán)境特定的變量定義到一個(gè)配置文件中,比如properties文件,把數(shù)據(jù)庫(kù)的用戶名和密碼存放到此屬性文件中。下面這篇文章就主要介紹了java中讀寫(xiě)Properties屬性文件公用方法,需要的朋友可以參考借鑒。2017-01-01try catch finally的執(zhí)行順序深入分析
首先執(zhí)行try,如果有異常執(zhí)行catch,無(wú)論如何都會(huì)執(zhí)行finally,當(dāng)有return以后,函數(shù)就會(huì)把這個(gè)數(shù)據(jù)存儲(chǔ)在某個(gè)位置,然后告訴主函數(shù),我不執(zhí)行了,接下來(lái)你執(zhí)行吧,所以函數(shù)就會(huì)推出2013-09-09MyBatis中#{}?和?${}?的區(qū)別和動(dòng)態(tài)?SQL詳解
這篇文章主要介紹了MyBatis中#{}和${}的區(qū)別,包括參數(shù)傳遞、安全性、性能等方面,然后詳細(xì)介紹了如何使用#{}和${}進(jìn)行排序、模糊查詢(xún)、動(dòng)態(tài)SQL、數(shù)據(jù)庫(kù)連接池等操作,最后,總結(jié)了注解方式的動(dòng)態(tài)SQL,感興趣的朋友跟隨小編一起看看吧2024-11-11Java實(shí)戰(zhàn)之校園外賣(mài)點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)易的校園外賣(mài)點(diǎn)餐系統(tǒng),文中采用的技術(shù)有:JSP、Spring、SpringMVC、MyBatis 等,感興趣的可以了解一下2022-03-03解讀HttpServletRequestWrapper處理request數(shù)據(jù)流多次讀取問(wèn)題
在Java Web開(kāi)發(fā)中,獲取HTTP請(qǐng)求參數(shù)是常見(jiàn)需求,本文詳細(xì)討論了通過(guò)POST方式獲取參數(shù)的兩種主要方法:使用request.getParameter()適用于application/x-www-form-urlencoded和multipart/form-data內(nèi)容類(lèi)型;而對(duì)于application/json類(lèi)型的數(shù)據(jù)2024-10-10