最近在跟着学的项目,回过头来发现商品规格模板这一操作并未完成,特开此帖,记录实现过程。
起初状态是这样:选中需要删除的规格参数模板会出现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的商品规格参数模板