一、需求介紹
前端是一個列表頁面,列表可以進行復選框的選擇,后台進行關聯表數據的刪除。
二、框架介紹
springboot+mybatis 數據庫用的postgresql
三、具體代碼(前端js)
1、前端涉及到的代碼
//判斷選中狀態
var ids ="";
$(".checkbox").each(function () {
if($(this).is(':checked'))
ids +=$(this).val() + ",";
});
ids = ids.slice(0,ids.length-1);
//刪除
$.ajax({
cache: false,
type: "post",
dataType:'json',
data:{
id:ids,
},
2、邏輯處理層
Map<String, Object> m = getMaps(req);
log.info("|" + m + "|");
// 獲取選中的id
String ids=m.get("id").toString();
//將獲取到的選中的列表封裝在list中
List<String> list = new ArrayList<String>();
String[] stIds = ids.split(",");
for (String value : stIds){
list.add(value);
}
int row = knowledgeDao.deleteById(list);
3、dao層處理
這個仔細測試發現,只是刪除了(USING前)file_info 表中的數據,主表數據並沒有刪除
@Delete("<script>" +
"delete from file_info f USING resource_info k WHERE f.id = k.file_id and k.id in " +
" <foreach collection=\"list\" open=\"(\" close=\")\" separator=\",\" item=\"ids\">#{ids}</foreach>;" +
"</script>")
int deleteById(List<String> ids);
/**
* 刪除選擇的文件信息 先刪除字表數據,再刪除主表數據,多個sql實現,目前沒發現更好的辦法
* * @return
*/
@Delete("<script>" +
"delete from file_info f USING knowledge_info k WHERE f.id = k.file_id and k.id in " +
" <foreach collection=\"list\" open=\"(\" close=\")\" separator=\",\" item=\"ids\">#{ids}</foreach>;" +
" delete from knowledge_info WHERE id in " +
" <foreach collection=\"list\" open=\"(\" close=\")\" separator=\",\" item=\"ids\">#{ids}</foreach>;"+
"</script>")
int deleteById(List<String> ids);