1、批量删除之前,首先需要实现的是全选全不选
//完成全选,全不选的功能
//对于dom原生的属性,应当使用prpo进行修改,而对于自定义的属性使用attr进行修改
//#checkbox_all:这个是全选框,.check_item是普通的选框
$("#checkbox_all").click(function(){
$(".check_item").prop("checked",$(this).prop("checked"));
});
$(document).on("click",".check_item",function(){
var flag = $(".check_item:checked").length == $(".check_item").length;
$("#checkbox_all").prop("checked",flag);
});
2、完成全选后,给批量删除按钮加点击事件,发送ajax请求
//批量删除图书
$("#delete_batch_cart").click(function(){
//首先定义一个空字符串
var bIds = "";
//遍历每一个选中的普通选框,拿到要删除的图书的ID,拼成一个字符串,每个ID之间用“-”分隔。
$.each($(".check_item:checked"),function(){
bIds += $(this).parents("tr").find("td:eq(1)").text()+"-";
});
//去掉最后一个多余的“-”
bIds = bIds.substring(0,bIds.length-1);
$.ajax({
url:"${APP_PATH}/deleteBatchBook",
type:"GET",
data:"bIds="+bIds,
success:function(result){
location.reload(true);
alert("批量删除成功!");
}
});
});
3、controller拿到这个字符串以后进行分割,
虽然也可以一个一个的删除,但是不建议这样做,这样会避免频繁操作数据库,从而影响数据库性能。所以拼装sql语句进行批量删除
注意一点:在传入到mapper.xml中参数是一个List,所以在传入之前需要把字符串变为一个集合。
//批量删除图书信息
@RequestMapping("/deleteBatchBook")
@ResponseBody
public Msg deleteBatchBook(String bIds){
List<Integer> list = new ArrayList<Integer>();
if(bIds.contains("-")){
String[] bids = bIds.split("-");
for(String bid : bids){
int bId = Integer.parseInt(bid);
list.add(bId);
}
}
bookService.deleteBook(list);
return Msg.success();
}
4、mapper.xml中的实现
注意:
parameterType=”java.util.List”是传入参数的类型。
collection=”list”,声明循环的是List,一定是list,不能是你传入的参数,例如虽然你实际传入的list的名字是headerList,但是写的时候也是list;
item=”bId”是每个小项,自己取名,下面会用到。 open=”(” close=”)” index=”index”
separator=”,” :这个是用来拼装成in(bId1,bId2…..)这种形式的。一定是逗号。因为in语句中使用的是逗号。
<!-- 使用sql语句进行批量删除 -->
<delete id="deleteBook" parameterType="java.util.List">
delete from book where b_id in
<foreach collection="list" item="bId" open="(" close=")" index="index" separator=",">
#{bId}
</foreach>
</delete>
最后:批量插入也是使用相同的方法