sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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()。
  • 如果该文章对您有帮助,请帮忙点赞和投票,您的支持是我持续写作的动力。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
posted on 2022-06-07 23:08  sunny123456  阅读(5576)  评论(0编辑  收藏  举报