遞歸刪除資源樹 Ztree
阿新 • • 發佈:2018-03-27
cat lis 刪除節點 若是 body urn turn comment log
前言
- 最近項目裏有這麽一個需求:現在有一個用Ztree編寫的資源樹,當刪除資源樹的某個節點時,則將此節點下面的所有節點全部刪除,這裏顯然就用到了遞歸;若此節點被刪除後無其它的兄弟節點了,我們還需要將其父節點更新成新的子節點。
代碼中用到的技術
- 小編操作數據庫用的是mybatis,大部分操作直接使用的mybatis的逆向工程,至於mapper的註入,我就不貼代碼了。
1、刪除節點的入口
public void deleteCategory(Long id) {
//將此節點對象從數據庫中搜出來
TbContentCategory node = categoryMapper.selectByPrimaryKey(id);
//刪除此節點
this.recursiveDelete(id);
//判斷是否更新父節點
this.updateParentNode(node.getParentId());
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2、遞歸刪除資源樹上的節點
/**
* 遞歸刪除資源樹上的節點
* @param 要刪除的節點id
*/
public void recursiveDelete(Long id) {
// 查詢此節點下面的所有的子節點
List<TbContentCategory> list = getListByParentId(id);
// 若此節點下面沒有子節點
if (list.size() == 0) {
TbContentCategory deleteNode = categoryMapper.selectByPrimaryKey(id);
//得到此節點的父節點Id
Long parentId = deleteNode.getParentId();
//刪除此節點
categoryMapper.deleteByPrimaryKey(id);
//刪除此節點後,判斷此節點的父節點是否為子節點,若是,則更新其父節點為子節點
this.updateParentNode(parentId);
} else {
categoryMapper.deleteByPrimaryKey(id);
for (TbContentCategory category : list) {
if (category.getIsParent()) {
//遞歸刪除節點
this.recursiveDelete(category.getId());
} else { categoryMapper.deleteByPrimaryKey(category.getId());
}
}
}
}
- 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
- 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
- 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
3、刪除子節點後,判斷其父節點是否需要更新成子節點
/**
* 判斷此節點是否存在兄弟節點,若不存在,則將其父節點更新成子節點
* @param 節點Id
*/
private void updateParentNode(Long parentId) {
//查詢此節點的所有的兄弟節點
List<TbContentCategory> contentCat = getListByParentId(parentId);
//若無兄弟節點
if (contentCat.size() == 0) {
//更新此節點的父節點為子節點
TbContentCategory node2 = categoryMapper.selectByPrimaryKey(parentId);
node2.setIsParent(false);
categoryMapper.updateByPrimaryKeySelective(node2);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
4、根據父節點Id 查詢所有的兄弟節點
/**
* 根據父節點Id 查詢所有的兄弟節點
* @param parentId
* @return
*/
public List<TbContentCategory> getListByParentId(Long parentId) {
TbContentCategoryExample example = new TbContentCategoryExample();
Criteria criteria = example.createCriteria();
criteria.andParentIdEqualTo(parentId);
List<TbContentCategory> list = categoryMapper.selectByExample(example);
return list;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
遞歸刪除資源樹 Ztree