最近用layui做后台练习,要用到批量删除功能,是基于SSM框架的,批量删除用在于当用户想删掉多条数据的时候,可以把要删的数据先打钩,然后再一键删除,我这里是真删除,不是修改状态而已,如果不想真删除的话就改成修改状态吧,原理差不多。
如图
首先是sql语句
<!-- 批量删除 -->
<delete id="deleteList" parameterType="java.lang.String">
delete from cars where cars_id in
<foreach item="ids" collection="array" index="no" open="(" separator="," close=")">
#{ids,jdbcType=VARCHAR}
</foreach>
</delete>
Mapper
/**
* 批量删除
*/
void deleteList(Integer[] ids);
Impl
@Override
public void deleteList(Integer[] ids) {
// TODO Auto-generated method stub
carDao.deleteList(ids);
}
控制器
/**
* 批量删除
*/
@ResponseBody
@RequestMapping("/delIds")
public String deleteByIds(Integer[] ids,HttpServletResponse response) {
JSONObject jsonObject=new JSONObject();
//JsonReturn jsonReturn = new JsonReturn();
//判断取到的数组id是否为空
if(ids==null) {
jsonObject.put("msg", "删除失败");
}
else {
iCarService.deleteList(ids);
jsonObject.put("msg", "删除成功");
}
//OutUtil.print(jsonObject,response);
return gson.toJson("删除成功");
}
Jsp的js代码
$("#datadel").on('click',function(){
//获取选中状态
var checkStatus = table.checkStatus('relTable');
//获取选中数量
var selectCount = checkStatus.data.length;
if(selectCount== 0){
layer.msg('至少选一个吧',function(){});
return false;
}
layer.confirm('真的要删除选中的项吗?',function(index){
layer.close(index);
index=layer.load(1,{shade:[0.1,'#fff']});
var isStr="";
for(var i=0;i<selectCount;i++){
isStr=isStr+","+checkStatus.data[i].carsId;
}
$.ajax({
type:'post',
data:{"ids":isStr},
url:'${ctx}/cars/delIds.do',
success:function(data){
if(data.code==0){
$('#reload').click();
}
layer.close(index);
layer.msg('删除成功!');
table.reload('relTable',{});
},erro:function(code){
layer.msg('操作失败!');
}
})
})
});
效果图
刚开始做的时候会出现很多bug,比如删除的时候没反应,传值没传过去,后来发现是写少了代码,或者显示删除成功了,但是表格没反应,就去数据库看到底有没有删除掉,数据库是删了的话,那就是表格刷新的问题了,有问题不能慌,一点一点去分析,把大问题拆分成小问题,最后还是可以解决的。