遞迴查詢本節點的id及孩子節點的id
阿新 • • 發佈:2022-05-31
1、Controller:
@RequestMapping("get_deep_category.do")
@ResponseBody
public ServerResponse getCategoryAndDeepChildrenCategory(HttpSession session,@RequestParam(value = "categoryId" ,defaultValue = "0") Integer categoryId){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user == null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"使用者未登入,請登入");
}
if(iUserService.checkAdminRole(user).isSuccess()){
//查詢當前節點的id和遞迴子節點的id
// 0->10000->100000
return iCategoryService.selectCategoryAndChildrenById(categoryId);
}else{
return ServerResponse.createByErrorMessage("無許可權操作,需要管理員許可權");
}
}
2、Service:
ServerResponse<List<Integer>> selectCategoryAndChildrenById(Integer categoryId);
3、ServiceImpl:
/**
* 遞迴查詢本節點的id及孩子節點的id
* @param categoryId
* @return
*/
public ServerResponse<List<Integer>> selectCategoryAndChildrenById(Integer categoryId){
Set<Category> categorySet = Sets.newHashSet();
findChildCategory(categorySet,categoryId);
List<Integer> categoryIdList = Lists.newArrayList();
if(categoryId != null){
for(Category categoryItem : categorySet){
categoryIdList.add(categoryItem.getId());
}
}
return ServerResponse.createBySuccess(categoryIdList);
}
//遞迴演算法,算出子節點
private Set<Category> findChildCategory(Set<Category> categorySet ,Integer categoryId){
Category category = categoryMapper.selectByPrimaryKey(categoryId);
if(category != null){
categorySet.add(category);
}
//查詢子節點,遞迴演算法一定要有一個退出的條件
List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId);
for(Category categoryItem : categoryList){
findChildCategory(categorySet,categoryItem.getId());
}
return categorySet;
}
4、Mapper:
①:Category selectByPrimaryKey(Integer id);
②:List<Category> selectCategoryChildrenByParentId(Integer parentId);
5、Mapper.xml:
①:
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from mmall_category
where id = #{id,jdbcType=INTEGER}
</select>
②:
<select id="selectCategoryChildrenByParentId" resultMap="BaseResultMap" parameterType="int">
select
<include refid="Base_Column_List"/>
from mmall_category
where parent_id = #{parentId}
</select>