Mybatis 级联删除的实现
作者:环游记 发布时间:2022-05-08 21:18:09
标签: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);
}
总结
根据需求和实际选择合适自己的方法。
来源:https://blog.csdn.net/zh15732621679/article/details/79680009


猜你喜欢
- 1、什么是集合框架?在java中,有一套现成的数据结构,例如顺序表,链表,队列,栈,优先级队列,哈希表等,被封装成了相应的接口/类,供程序员
- 在项目中遇到需要批量更新的功能,原本想的是在Java中用循环访问数据库去更新,但是心里总觉得这样做会不会太频繁了,太耗费资源了,效率也很低,
- 近日在工作中需要根据设备的HardwareID来获取设备的驱动程序信息,比如驱动程序版本等。经过摸索,得到了两种不同的解决办法,两种办法各有
- javax.el.ELException的解决方式failed to parse the expression [${xxx}]Tomcat
- 什么是JavaMemoryModel(JMM)?JMM通过构建一个统一的内存模型来屏蔽掉不同硬件平台和不同操作系统之间的差异,让Java开发
- IDEA自动跳出括号并且补全分号(类似eclipse的功能)跳括号外头去ctrl shift enter叫做 Complete Curren
- C# WinForm控件的拖动和缩放是个很有用的功能。实现起来其实很简单的,主要是设计控件的MouseDown、MouseLeave、Mou
- 过滤器实现过滤器需要实现 javax.servlet.Filter 接口。重写三个方法。其中 init()&n
- 目录服务注册服务发现服务注册引入相关依赖:<?xml version="1.0" encoding="U
- 克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇。其实在Java中也存在克隆
- 前言上一篇我们介绍了使用 sqflite 这个数据库工具在 Flutter 的应用中建立本地数据库的实例应用。了解过数据库的同学应该会知道,
- mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“val
- 前言在Java8中接口中不再只有抽象方法,还可以有静态方法以及默认方法,此时的接口更像是一个类。我们一起来看看如何使用吧~Java8中,可以
- 本文实例为大家分享了java实现查找替换功能的具体代码,供大家参考,具体内容如下查找if(searchTxt.getText().equal
- WebView设置WebViewClient的方法shouldOverrideUrlLoading:在web页面里单击链接的时候,会自动调用
- 1 什么是class对象类是程序的一部分,每个类都有一个class对象。换言之,每当编写并且编译了一个新类,就会产生一个class对象(更恰
- 时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验。京东和淘宝的物流顺序就是一个时间轴,想必大家都不陌生,如
- 本文实例讲述了C#实现的MD5加密功能与用法。分享给大家供大家参考,具体如下:1、创建MD5Str.cs加密处理类public class
- 1. 问题描述springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础
- 先来简单说一下本文所要实现的功能:用户在浏览网页的时候,长按某一区域,识别如果是图片,则弹出弹框,出现保存图片的功能。同时识别图片是否是二维