一、首先我们来看看结合foreach的delete语句:
<delete id="deleteEmp" >
delete from emp where eid in
<foreach collection="array" item="eid" open="(" close=")" separator="," >
#{eid}
</foreach>
</delete>
分别解读以上的属性:
我们正常写一个delete删除固定选择的的语句为
<!-- delete from emp where eid in(1,2) -->
使用foreach语句:
<!--
<foreach collection="" item="" open="" separator="" index=""></foreach>
对一个数组或集合进行遍历
collection:指定要遍历的集合或数组
item:循环中为每个循环的数据指定一个别名
close:设置循环体的结束内容
open:设置循环体的开始内容
separator:设置每一次循环之间的分隔符
index:若遍历的是list集合,index代表的是下标;若遍历的是map,index代表的是键
-->
通过这些解释可以得知,结合foreach的delete语句含义其实就为循环成固定的形式,只不过传进来的是一个数组。
二、dao层、service层代码如下:传入的都为一个数组
void deleteEmp(String[] eid);//dao层
void deleteEmp(String[] eids);//service接口
@Override
public void deleteEmp(String[] eid) {
empMapper.deleteEmp(eid);
} //实现类
controller层中的代码如下:
@RequestMapping(value = "/emps", method = RequestMethod.DELETE)
@ResponseBody
public String deleteMore(String[] eid) {
// 获取客户端name属性相同的多个元素的值,可以通过字符串字节或去,每个值中间以逗号分隔,也可以以数组直接获取。
service.deleteEmp(eid);
return "";
}
注意:我们前端将复选框的name属性设置为同一个值,并且通过一个form表单将input 标签的value值提交到后端
具体的jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>展示员工信息</title>
<link rel="stylesheet" href="${pageContext.servletContext.contextPath }/css/index_work.css" />
<script type="text/javascript" src="${pageContext.servletContext.contextPath }/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function () {
$("#selectAll").click(function () {
$("[name='eid']").prop("checked", $(this).prop("checked"));
});
$("#deleteMore").click(function () {
$("form").attr("action", $(this).attr("href")).submit();
return false;
});
});
</script>
</head>
<body>
<form method="post">
<input type="hidden" name="_method" value="DELETE" />
<table>
<tr>
<th>
<input type="checkbox" id="selectAll" />
</th>
<th>EID</th>
<th>ENAME</th>
<th>AGE</th>
<th>SEX</th>
<th>DEPARTMENTNAME</th>
<th>OPTIONS</th>
</tr>
<c:forEach items="${empList }" var="emp">
<tr>
<td>
<input type="checkbox" name="eid" value="${emp.eid}" />
</td>
<td>${emp.eid }</td>
<td>${emp.ename }</td>
<td>${emp.age }</td>
<td>${emp.sex == 0 ? '女':'男' }</td>
<td>${emp.dept.dname }</td>
<td>
<a href="emp">删除</a>
<a href="${pageContext.servletContext.contextPath }/emp/${emp.eid }">修改</a>
</td>
</tr>
</c:forEach>
<tr>
<td colspan="10">
<a id="deleteMore" href="${pageContext.servletContext.contextPath }/emps">批量删除</a>
${page }
</td>
</tr>
</table>
</form>
</body>
</html>
三、直接在delete语句中,用${}方式实现批量删除
<delete id="deleteMoreEmp">
delete from emp where eid in(${value})
</delete>
注意:这里dao层、service层以及controller层传入的参数不需要为数组,直接String eids
本文介绍了在SSM(Spring、SpringMVC、Mybatis)框架下实现批量删除的两种方法:一是利用Mybatis的delete配合foreach遍历数组删除;二是直接在delete语句中使用${}来实现。详细讲解了dao、service、controller层的代码实现,以及前端JSP页面的配合。


被折叠的 条评论
为什么被折叠?



