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