在写项目的时候,由于数据比较多,删除数据的时候一个一个的点击删除比较麻烦,所以准备在项目中使用批量删除的功能。批量删除在项目中的实现比较简单。
批量删除功能的实现主要难度是在前端,在后端只需要用mybatis做一个批量删除的接口就行。
1.增加表格数据勾选框
如果要在表格数据中实现批量删除,那么最基本的需要一个勾选框,选中了数据之前的勾选框才会进行删除。因此我们首先要在表格中加入勾选框,代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <table class="table table-border table-bordered table-bg table-hover table-sort">
<thead>
<tr class="text-c">
<th width="25"><input type="checkbox" name="subCheck" id="subCheck"/></th>
<th width="40">序号</th>
<th width="">员工工号</th>
<th width="">员工姓名</th>
<th width="">手机号</th>
<th width="">加入时间</th>
<th width="">所属部门</th>
<th width="">所属职位</th>
<th width="">是否为管理员</th>
<th width="">工作状态</th>
<th width="">操作</th>
</tr>
</thead>
<tbody>
<tr class="text-c" th:each="item:${lists}">
<td><input type="checkbox" th:attr="value=${item.empId}" name="subCheck" /></td>
<td th:text="${itemStat.count}"></td>
<td th:text="${item.empNum}"></td>
<td th:text="${item.empName}"></td>
<td th:text="${item.phone}"></td>
<td th:text="${#dates.format(item.createTime,'yyyy-MM-dd')}"></td>
<td th:text="${item.deptName}"></td>
<td th:text="${item.jobName}"></td>
<td class="flag" th:attr="value=${item.flag}" th:text="${item.roleName}==null?'暂未分配':${item.roleName}"></td>
<th:block th:if="${item.eStatus}==1">
<td class="td-status"><span class="label label-success radius">正常</span></td>
</th:block>
<th:block th:if="${item.eStatus}==0">
<td class="td-status"><span class="label radius">异常</span></td>
</th:block>
<td class="td-manage" th:switch="${item.eStatus}">
<span th:case="1">
<a style="text-decoration:none" th:onClick="'javascript:emp_stop(this,\''+${item.empId}+'\')'" href="javascript:;" title="异常"><i class="Hui-iconfont"></i></a>
</span>
<span th:case="0">
<a style="text-decoration:none" th:onClick="'javascript:emp_start(this,\''+${item.empId}+'\')'" href="javascript:;" title="正常"><i class="Hui-iconfont"></i></a>
</span>
<a title="详情" href="javascript:;" th:onclick="'javascript:emp_show(\''+${item.empId}+'\')'" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>
<a title="编辑" href="javascript:;" th:onclick="'javascript:layer_update(this,\''+${item.empId}+'\')'" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i> </a>
<a title="删除" href="javascript:;" th:onclick="'javascript:emp_del(this, \''+${item.empId}+'\')'" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>
</td>
</tr>
</tbody>
</table>
数据表格的代码如上所示,勾选框采用的是input框,主要是用name=”subCheck”做标识。
2.判断是否选中了数据
当我们点击了批量删除按钮之后,首先应该判断是否选中的数据,选中了之后才能进行下一步操作,没有选中数据则不进行下一步操作,并给出相应操作的提示。1
2
3
4
5var checkNum=$("input[name='subCheck']:checked").length;
if (checkNum==0){
layerOpen("请至少选择一项");
return;
}
在这里,layerOpen是我自己封装的一个方法。功能特别简单,主要就是一个弹窗,弹出自定义的输出内容。代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13function layerOpen(msg) {
var index = layer.open({
skin: 'layui-layer-molv', //样式类名
content: msg,
btn: ['确定'],
shade: 0.4,
shadeClose: true,
title: ['错误信息', 'text-align:center; color: red'],
yes: function () {
layer.close(index);
}
})
}
3.遍历所有的勾选框
1 | //批量选择 |
先弹出一个确认框,当点击确认时才进行下一步的操作,否则直接退出。遍历当前页面上的每一个勾选框,遇到第一个勾选框选中时,在checkedId中存放这个勾选框的value值,也就是数据的UUID值,刚好这个值就是我们后台需要的,然后将定义的标识符flag定为false。之后继续遍历,遇到第二个勾选框被勾选时,记录数据的UUID,同时加一个”,”进行分隔。
4.将选中的数据UUID通过ajax传到后台
1 | $.ajax({ |
5.在后台对数据库数据进行操作
1 | //批量删除员工信息 |
因为后台传过来的是一个字符串,所以我们首先将字符串切割开来放到一个数组里面,最后将数组转化为list集合,直接传递给mybatis完成删除操作即可。1
2
3
4
5
6
7
8
9
10
11
12
13
14<delete id="batchDelete" parameterType="java.util.List">
DELETE e.*, em.*, u.*, ur.*
FROM t_emp e
LEFT JOIN t_emp_param em
ON e.EMP_ID=em.EMP_ID
LEFT JOIN t_user u
ON e.EMP_ID = u.USER_ID
LEFT JOIN t_user_role ur
ON u.USER_ID = ur.USER_ID
WHERE e.EMP_ID IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</delete>
后台的操作比较简单,但是因为涉及到多张表关联,在这里我用到的是将多张表关联在一起然后匹配字段一起删除,比起级联删除,这样对资源池的消耗比较小。
6.对页面进行刷新,重新加载数据库中的数据
1 | /** |
以上操作即可实现数据的批量删除,操作比较简单,主要是为了记录下这个过程。