添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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的基本使用,再根据本篇进行其他练习。

方法/步骤

  1. 我们之前介绍过基本的根据id删除的方法,如下图所示。

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

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

  3. 以上两种方法的代码如下:

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

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

  4. 接下来我们再看看同样是删除一组集合中的数据,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);}

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

    END