原型图:
思路:当前分类的上级变动,需要更新的数据就是当前分类下的所有子集
// 上级分类变更后,重新构建当前和其自己分类路径
/**
* 修复路径
*/
private void fixPath(String id) {
final List<Category> lowerCategories = this.baseMapper.lowerRecursive(id);
for (Category lowerCategory : lowerCategories) {
final List<Category> upperCategories = this.baseMapper.upperRecursive(lowerCategory.getId());
Collections.reverse(upperCategories);
final String parentIds = upperCategories.stream().map(Category::getId).collect(Collectors.joining(SEPARATOR));
final String path = upperCategories.stream().map(Category::getName).collect(Collectors.joining(SEPARATOR));
this.lambdaUpdate().eq(Category::getId, lowerCategory.getId()).set(Category::getParentIds, parentIds).set(Category::getPath, path).update();
}
}
/**
sql向下递归查询当前一起其子集:
WITH RECURSIVE temp AS (
SELECT * FROM category r WHERE r.id ='1451104440619315201'
UNION ALL
SELECT r.* FROM category r,temp t WHERE t.id = r.parent_id
)select * from temp
sql向上递归查询:
WITH recursive temp AS (
SELECT * FROM category r WHERE r.id ='1478601656655077377'
UNION ALL
SELECT r.* FROM category r,temp t WHERE t.parent_id = r.id
)select * from temp
*/