• Spring Data JPA删除及批量删除功能 delete(list)和deleteInBatch(list) 是执行多条sql和条sql 的区别


    Spring Data JPA删除及批量删除功能 delete(list)和deleteInBatch(list)
    https://blog.csdn.net/weixin_33508642/article/details/114315542

    在之前的Spring Data JPA基础增删改查篇我们介绍了根据主键id进行删除的方法,实际上Spring Data JPA也提供了批量删除一组数据和批量删除全部数据的方法。对Spring Data JPA不熟悉的朋友可以参考下文先了解Spring Data JPA的基本使用,再根据本篇进行其他练习。

    工具/原料

    • IntelliJ IDEA

    方法/步骤

    1. 我们在之前几篇都讲到了在创建Repository接口时需要继承JpaRepository接口,我们查看该接口的源码可以看到有如下两个批量删除的方法,deleteInBatch(Iterable<T> entities)批量删除一组集合数据,以及deleteAllInBatch()批量删除全部数据的接口。

      Spring Data JPA删除及批量删除功能
    2. 我们之前介绍过基本的根据id删除的方法,如下图所示。

      @DeleteMapping(path = "/delete/{id}")public void delete(@PathVariable Long id) {    userRepository.delete(id);}

      Spring Data JPA删除及批量删除功能
    3. 接下来我们看看同样是删除全部的deleteAll()和deleteAllInBatch()的区别。deleteAll()是删除全部,先findALL查找出来,再一条一条删除,最后提交事务。deleteAllInBatch()是删除全部,一条sql。显而易见,deleteAllInBatch()方法效率更高一些。

      Spring Data JPA删除及批量删除功能
    4. 以上两种方法的代码如下:

      /** * 删除全部,先findALL查找出来,再一条一条删除,最后提交事务 */@DeleteMapping(path = "/delete/all")public void deleteAll() {    userRepository.deleteAll();}/** * 删除全部,一条sql */@DeleteMapping(path = "/delete/batch")public void deleteBatch() {    userRepository.deleteAllInBatch();}

      启动应用后,使用postman进行调用,查看控制台打印的sql可以发现,步骤3的结论是正确的。

      Spring Data JPA删除及批量删除功能
      Spring Data JPA删除及批量删除功能
    5. 接下来我们再看看同样是删除一组集合中的数据,delete(list)和deleteInBatch(list)哟什么区别。同样的,delete()方法打印的sql是一条一条删除的,而deleteInBatch()是一条sql语句删除的。

      /** * 批量删除,删除集合,一条一条删除 */@PostMapping(path = "/delete/list")public void deleteList(@RequestBody List<User> list) {    userRepository.delete(list);}/** * 批量删除,删除集合,一条sql,拼接or语句  如 id=1 or id=2 * @param list */@PostMapping(path = "/delete/batch/list")public void deleteBatchList(@RequestBody List<User> list) {    userRepository.deleteInBatch(list);}

      Spring Data JPA删除及批量删除功能
    6. 我们在启动服务后用postman进行测试,请求的url、参数及测试的结果如下图所示。我们同样将步骤5中的两个方法的sql语句打印出来,可以看到符合步骤5的结论。

      Spring Data JPA删除及批量删除功能
      Spring Data JPA删除及批量删除功能
      Spring Data JPA删除及批量删除功能
      Spring Data JPA删除及批量删除功能
      END

    注意事项

    • 我们在进行批量删除操作时尽量使用JpaRepository自带的批量删除方法deleteInBatch(Iterable entities)以及deleteAllInBatch()。
    • 如果该文章对您有帮助,请帮忙点赞和投票,您的支持是我持续写作的动力。
    经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
    作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
  • 相关阅读:
    静态切割窗体+关联对话框
    POJ 2236 Wireless Network(并查集)
    怎样学习(3):迭代学习,精益求精
    【菜鸟也疯狂UML系列】——概述
    OpenGL 资源汇编
    vue之mapMutaions的使用 && vuex中 action 用法示例 && api.js的使用
    内置组件 && vue中强大的缓存机制之keep-alive
    vue生命周期及使用 && 单文件组件下的生命周期
    vue中遇到的坑 --- 变化检测问题(数组相关)
    如何去除vue项目中的 # --- History模式
  • 原文地址:https://www.cnblogs.com/sunny3158/p/16353823.html
Copyright © 2020-2023  润新知