最近在跟着学的项目,回过头来发现商品规格模板这一操作并未完成,特开此帖,记录实现过程。
起初状态是这样:选中需要删除的规格参数模板会出现404错误,我们浏览器F12打开这个请求进行下分析。
请求的URL:/item/param/delete
请求方式:POST
请求的参数:? 往下翻一下就可以看到了
这个过程简单来说就是:选中的规格参数的ID作为参数传入了后台处理,实际上就是要去根据ID删除表tb_item_param的几行数据。
再来看item-param-list.jsp中:
若未选中任何规格参数模板,会弹出相应提示。 ids.length == 0
选中规格参数模板,就会提示,是否需要删除选中的规格参数模板?
请求连接和参数很明显已经指出了,这里需要说明下,传入的不是单个Long类型的数据,存在多项删除!!!
此时,我们需要去接收时需要注意。
Controller层:
/* * 商品规格参数模板的删除 * */ @RequestMapping("/delete") @ResponseBody public TaotaoResult deleteItemParam(@RequestParam("ids") List<Long> ids){ //测试下传输过来的参数是否正确 for (int i = 0; i < ids.size(); i++) { System.out.println(ids.get(i)); } System.out.println(ids.size()); return itemParamService.deleteItemParam(ids); }
需要注意
1.@RequestMapping中的value进行了简化处理
2.@RequsetParam("ids") 必须和前台页面请求的参数名称相同
3.这里采用了List进行存储,存储的数据均为Long类型,参照数据表tb_item_param
4.返回值采用给定的自定义返回体TaotaoResult
Service层:
//删除商品规格模板 public TaotaoResult deleteItemParam(List<Long> ids);
/* * 删除已经存在的商品规格模板 * */ @Override public TaotaoResult deleteItemParam(List<Long> ids) { /* * 按照主键进行商品删除 --- 不可行 存在多项删除 * 由于Mybatis逆向工程生成的SQL为单表简单查询,这里我们去构造一个多项删除的SQL语句 * */ int result = itemParamMapper.deleteBatch(ids); //System.out.println(result); if(result > 0){ return TaotaoResult.ok(ids); } return TaotaoResult.ok(); }
1.deleteBatch方法是我们手动构造的,用于实现多项删除,语句模板如下:
delete from table_name where column_name in (data1,data2,data3);
2.数据删除操作返回的应该是int类型的影响记录数,若为0便是并未进行删除,n为受影响的行数。
3.若删除操作成功,返回数据中带有所删除规格参数模板ID。反之,不存在任何数据。
Dao层:
进入Mapper.xml文件进行构造多项删除SQL语句:
<!-- 批量删除商品规格模板 --> <delete id = "deleteBatch" parameterType = "java.util.List"> delete from tb_item_param where id in <foreach collection="list" item = "data" open="(" separator="," close=")">#{data} </foreach> </delete>
id:对应方法名
parameterType:参数类型 -- List
collection:list 、array(也可以用数组)
item:list中元素命名
#{data}:获取元素数据
这里用到了foreach循环,循环List中的携带参数,从而拼装多项删除SQL语句
open:语句开始符
separator:分隔符
close:语句闭合符号
测试:删除ID为23,24的商品规格参数模板