在項目中,一般會遇到這種情況:邏輯刪除以及多關聯不刪除
邏輯刪除(軟刪除):邏輯刪除就是對要被刪除的數據打上一個刪除標記,通常使用一個is_deleted字段標示行記錄是不是被刪除(或者使用一個status字段代表所謂的“刪除”狀態),在邏輯上是數據是被刪除的,但數據本身是依然存在的。
推薦課程:MySQL教程
在前端頁面中刪除了,也不顯示了,其實數據庫中并沒有刪除,只是根據了一個狀態字段,0啟動,1停用的思路來達成。
所以邏輯刪除就是只是將一個名為status字段進行更改,來達到前端頁面是否顯示的方式,其數據本身并沒有被刪除,想要恢復只需要改回status字段即可。
思路:
在XML中寫查詢SQL時,多加一個條件,庫中的狀態字段
SELECT * FROM md_drainage_basin <where> <if test="basinName != null"> and basin_name LIKE concat('%',#{basinName},'%')</if> <if test="state != null">AND state = #{state}</if> </where> ORDER BY sort_order
那我們給前端頁面時候的數據,就要自己在Java代碼中進行默認操作,因為前端是不會在查詢的傳一個狀態碼的,后臺自己生成
mdDrainageBasin.setState(0); List<MdDrainageBasin> list = mdDrainageBasinMapper.findByQuery(mdDrainageBasin);
默認把狀態0啟動set到實體類中,再進行查詢,這樣前端看到的只有狀態為0的數據
邏輯刪除是把狀態碼進行更新,更新成1,調用update而不是delete,但考慮到多表關系,例如流域下面掛著水系,邏輯刪除一條流域,那下面的水系也要進行邏輯刪除不給與顯示,這時可根據判斷,如果流域下面有相應水系,則不刪除,不然刪除
MdDrainageBasin mdDrainageBasin = mdDrainageBasinService.findById(id); List<MdWaterSystem> list = mdWaterSystemMapper.findByWater(mdDrainageBasin.getBasinCode()); if (list.size() > 0) { return ResponseMsgUtil.failure(); } else { mdDrainageBasin.setState(1); mdDrainageBasinService.update(mdDrainageBasin); return ResponseMsgUtil.success(mdDrainageBasin); }
根據前端傳入的Id進行查詢哪一條流域,這條流域下面有多少水系,有水系,不刪除,沒水系,刪除
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END