Mybatis 級聯刪除的實現
需求描述
今日需求是刪除資源時同時刪除與該資源綁定的角色數據,有兩張表,資源表、角色與資源綁定表,級聯刪除的時候有兩種方法:①建立表時直接建立約束,當父表刪除數據時數據庫會自動去刪除子表中的數據,②通過代碼實現級聯刪除,先刪除子表數據,然后刪除父表中的數據。
通過數據庫實現
可以參考博文://www.jb51.net/article/88148.htm
這種方式假如我們要刪除父表的數據,子表的數據就會被刪除,而我們的業務需求是表中是否刪除由is_delete字段來標識,所以這種方式是可以實現級聯表刪除的,但是不符合我們的需求,在此只提供一種這樣的思路。
通過代碼實現
先寫一個刪除資源和角色綁定的接口:
/** * 根據資源id刪除相關的角色資源綁定數據 * @param applicationIds 資源ids * @return 受影響行數 */ int deleteByApplicationId(List<String> applicationIds);
<delete id='deleteByApplicationId'> UPDATE tc_role_application SET is_delete =1 WHERE application_id IN ( <foreach collection='list' item='id' separator=','> #{id} </foreach> ) AND is_delete = 0 </delete>
寫一個刪除資源的接口:
int deleteByIds(@Param('list') List<String> var1, @Param('operator') String var2);
<delete id='deleteByIds'> update tc_application set is_delete = 1 , update_time=now() , operator = #{operator,jdbcType=VARCHAR} where id in ( <foreach collection='list' item='id' separator=','> #{id} </foreach> ) and is_delete = 0 </delete>
執行刪除時,先刪除子表數據,后刪除父表數據:
/** * 批量刪除資源并刪除其下相關的資源角色綁定數據 * @param ids 資源ids */ @Transactional(rollbackFor = Exception.class) @Override public void deleteApplicationByIds(List<String> ids) { String user = TenancyContext.UserID.get(); //先刪除資源角色表中資源和角色綁定的數據 roleApplicationService.deleteByApplicationId(ids); //刪除資源表數據 this.deleteByIds(ids, user); }
總結
根據需求和實際選擇合適自己的方法。
到此這篇關于Mybatis 級聯刪除的實現的文章就介紹到這了,更多相關Mybatis 級聯刪除內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: