Spingboot + axios 完成批量删除操作

文章讲述了在前端选择多个商品ID后,通过Ajax的axios发送DELETE请求到后端,后端接收到字符串ID,转换为整数数组并执行批量删除的过程。主要涉及前端数组转字符串,后端字符串转整数数组以及Mapper接口的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成练习要求的时候,遇到一个前端选择多个商品后,点击批量删除的操作

 但我这种两小时速学增删改查的垃圾后端写起来就有点懵逼了

简单的查了一下,看不懂= =

但大概知道是【前端传一个数组,后端把数组做匹配删除】

后端

那么,后端的Controller可以这么写

    //3、批量删除id
    @DeleteMapping("delBatch")
    public String delBatch(@RequestParam(("str")) String str){
        //1、获取到前端传回来的字符串
        System.out.println(str);
        //2、把str分隔成字符串数组(但是不能直接用字符串数组跟集合的id匹配)
        String[] arr = str.split(",");
        //3、声明一个整数数组,长度与arr一致
        int [] num = new int[arr.length];
        //4、把字符串数组的值赋值给整数数组,然后直接进行sql操作
        for (int i = 0; i < arr.length; i++) {
            num[i] = Integer.parseInt(arr[i]);
            footprintMapper.deById(num[i]);
        }
        return "删除成功";
    }

1、这里让前端传了一个字符串过来,但是前面不是说是要前端传数组麽,就让前端把声明的数组的id值先拼接成一个字符串进行传递

      let arr = [2,3]
      arrStr = arr.toString()

2、后端这里用字符串str接收!打印str是接收成功了的

然后把str字符串用逗号分隔成一个字符串数组

但是不能直接把字符串数组的索引值就拿去执行sql的判断,会报一个类型不匹配的错误

 因为id是int,但是字符串索引值是string = =

3、声明一个整数类型的数组,长度跟字符数组一样,然后循环字符串数组把值转换后赋值给整数数组,然后把整数数组的索引作为id拿去传给mapper

    @Delete("delete from footprint where id = #{id}")
    void deById(int id);

前端

完成了后端,先跑起来,然后去写个前端的axios测试一下

这是数据库

测试把id为9和10的一块删掉 

前端这么写

    <button class="de">批量删除</button>
      let arr = [9,10] //1、声明个数组
      arrStr = arr.toString() //2、转为字符串
      console.log(arrStr);
      //3、批量删除
      document.querySelector('.de').addEventListener('click',function(){
        axios({
          method:'delete',
          url:'http://localhost:8081/footprint/delBatch',
          params:{
            str:arrStr //把转换的字符串传过去
          }
        }).then(res=>{
          console.log(arr);
          console.log(arr.toString);
          console.log(res);
        })
      })

把请求发出去

请求没有问题

刷新一下数据库

 

成功了思密达!

小结

1、从前端传个字符串回来的思路是没有错的,后端这里把它转为数组,但是会被转为字符串数组,然后就需要进行一个整数的转换(我后端烂透顶就只能这么搞了= =)

2、不需要在方法内声明一个集合,然后用这个集合去接收到数据库的数据,也就是不需要发起一个select的sql让集合去存储它,我们可以直接拿传递过来的id去进行删除,因为删除操作就只有成功和失败两种,也不会造成什么影响,成功就删除,失败就无所谓了

 

如果使用ElementUI发送DELETE请求,可以通过在请求体中传递多个参数实现。具体实现方式如下: 1. 后端实现 在后端使用@DeleteMapping注解处理DELETE请求时,可以将多个参数封装成一个Java对象,例如: ```java @DeleteMapping("/resource") public void deleteResource(@RequestBody DeleteResourceRequest request) { // 处理删除请求,request中包含多个参数 } ``` 其中,DeleteResourceRequest是一个Java对象,包含多个参数。例如: ```java public class DeleteResourceRequest { private Long resourceId; private String resourceType; // 其他参数 // ... // getter和setter方法 } ``` 2. 前端实现 在前端使用ElementUI发送DELETE请求时,需要将多个参数封装成一个JSON对象,然后将该JSON对象作为请求体发送到后端。例如: ```javascript var data = { resourceId: 123, resourceType: 'example', // 其他参数 // ... }; this.$confirm('确定删除该资源吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$axios.delete('/resource', { data: data }).then(response => { // 处理成功响应 }).catch(error => { // 处理错误响应 }); }).catch(() => { // 取消删除 }); ``` 其中,data是一个JSON对象,包含多个参数。在发送DELETE请求时,需要将data对象作为请求体的内容,并通过`this.$axios.delete()`方法发送请求。需要注意的是,ElementUI使用的是axios库发送HTTP请求,因此需要在Vue组件中引入axios库。 这样,后端就可以将请求体中的JSON字符串转换成Java对象,并从中获取多个参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长风沛雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值