圖書管理系統:使用sql拼裝實現批量刪除
阿新 • • 發佈:2019-01-25
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>
最後:批量插入也是使用相同的方法