Mybatis 级联删除的实现

 更新时间:2020年11月02日 14:17:43   作者:环游记  
这篇文章主要介绍了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 级联删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现图片上加文字水印(SpringMVC + Jsp)

    java实现图片上加文字水印(SpringMVC + Jsp)

    这篇文章主要为大家详细介绍了java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • SSH框架网上商城项目第30战之项目总结(附源码下载地址)

    SSH框架网上商城项目第30战之项目总结(附源码下载地址)

    这篇文章主要介绍了SSH框架网上商城项目第30战之项目总结,并附源码下载地址,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • springBoot 与neo4j的简单整合示例

    springBoot 与neo4j的简单整合示例

    这篇文章主要介绍了springBoot 与neo4j的简单整合示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 使用Spring的StopWatch实现代码性能监控的方法详解

    使用Spring的StopWatch实现代码性能监控的方法详解

    在开发过程中,偶尔还是需要分析代码的执行时间,Spring 框架提供了一个方便的工具类 StopWatch,本文将介绍 StopWatch 的基本用法,并通过示例演示如何在项目中使用 StopWatch 进行代码性能监控
    2023-12-12
  • MyBatis-Plus中自动填充功能的用法示例详解

    MyBatis-Plus中自动填充功能的用法示例详解

    有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version、注册时默认的用户角色等,在MP中提供了这样的功能,可以实现自动填充功能,需要的朋友可以参考下
    2022-12-12
  • Java日常练习题,每天进步一点点(28)

    Java日常练习题,每天进步一点点(28)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java中异常处理之try和catch代码块的使用

    Java中异常处理之try和catch代码块的使用

    这篇文章主要介绍了Java中异常处理之try和catch代码块的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java反射获取所有Controller和RestController类的方法

    Java反射获取所有Controller和RestController类的方法

    这篇文章给大家分享了Java反射获取所有Controller和RestController类的方法,文中有详细的代码示例讲解,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • Idea连接数据库并执行SQL语句的方法示例

    Idea连接数据库并执行SQL语句的方法示例

    这篇文章主要介绍了Idea连接数据库并执行SQL语句的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java中使用回调函数的方法实例

    Java中使用回调函数的方法实例

    本文主要介绍了Java中使用回调函数的方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论