递归删除——项目实战篇

需求分析:Dept是一个自关联表,子部门和父部门是同一张表。删除一个部门的信息时,首先确定它的有没有子部门,如果有子部门就先将其子部门都删除然后再删除父部门。这里就用到了递归删除的方案:



js页面:

<div class="eXtremeTable" >
<table id="ec_table" class="tableRegion" width="98%" >
	<thead>
	<tr>
		<td class="tableHeader"><input type="checkbox" name="selid" οnclick="checkAll('id',this)"></td>
		<td class="tableHeader">序号</td>
		<td class="tableHeader">编号</td>
		<td class="tableHeader">上级</td>
		<td class="tableHeader">名称</td>
	</tr>
	</thead>
	<tbody class="tableBody" >
<!--  links是在page工具类中分页进行了封装的 -->
       ${links }
<!--  results是在page工具类中List<T>进行了封装的 -->
 <c:forEach items="${results }" var="dept"  varStatus="st">
		<tr class="odd" οnmοuseοver="this.className='highlight'" οnmοuseοut="this.className='odd'" align="left">
			<td><input type="checkbox" name="id" value="${dept.id }"/></td>
			<td>${st.count }</td>
			<td>${dept.id }</td>
			<td>${dept.parent.deptName }</td>
			<td><a href="deptAction_toview?id=${dept.id }">${dept.deptName }</a></td>
		</tr>
   </c:forEach>
	</tbody>
</table>
</div>


这里用到了批量删除:

web层:即action中

public String delete() throws Exception {
    	//1.得到用户所选中的id数组
    	String ids[] = model.getId().split(", ");
    	//2.调用业务方法,实现删除操作
    	deptService.delete(Dept.class, ids);	
    	//3.跳页面
    	return "alist";
    }

service层:

public void deleteById(Class<Dept> entityClass, Serializable id) {
		//1.加载出当前这个部门下的所有子部门
		List<Dept> deptList = baseDao.find("from Dept where parent.id=?", Dept.class, new Serializable[]{id});	
		//2.遍历
		if(deptList!=null && deptList.size()>0){
			for(Dept dept :deptList){
				deleteById(Dept.class,dept.getId());// 递归删除当前这个子部门下面的子部门
			}
		}		
		baseDao.deleteById(entityClass, id);
	}
	public void delete(Class<Dept> entityClass, Serializable[] ids) {
		//baseDao.delete(entityClass, ids);
		for(Serializable id :ids){
			deleteById(Dept.class,id);//调用上面的删除一条记录的方法
		}
	}

dao层:

        //单条删除,按id
	public <T> void deleteById(Class<T> entityClass, Serializable id);
	//批量删除
	public <T> void delete(Class<T> entityClass, Serializable[] ids);

将递归加到service而不加到dao层的原因是方便事务回滚。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值