有一个需求,需要级联查询出树形菜单列表:
mapper:
public interface LawTypeInfoMapper extends baseMapper{ LawTypeInfoVO selectTypeTree(@Param("id")Integer id); }
bean:
@Data
@EqualsAndHashCode(callSuper = false)
public class LawTypeInfoVO implements Serializable {
@ApiModelProperty(value = "主键id")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "类型名称")
private String name;
@ApiModelProperty(value = "父级id")
private Long pid;
@ApiModelProperty(value = "树节点")
private Integer degree;
@ApiModelProperty(value = "创建者")
private String createBy;
@ApiModelProperty(value = "更新者")
private String updateBy;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "更新时间")
private Date updateTime;
private List lawTypeInfoVOS;
}
xml
id,`name`,pid,degree,create_by,update_by,create_time,update_time,flag law_type_info
查询出结果后,需要查出某一个菜单下的内容,包括所有子菜单下的内容,我们的思路是查出所有菜单及子菜单id,然后用in去检索。
查询目录:
Listlongs = null; if (dto.getLawTypeId() != null) { LawTypeInfoVO lawTypeInfoVO = lawTypeInfoMapper.selectTypeTree(dto.getLawTypeId()); if (lawTypeInfoVO == null) { throw new BusinessException("目录结构不存在!"); } longs = new ArrayList<>(); longs.add(lawTypeInfoVO.getId()); getTypeIds(longs, lawTypeInfoVO.getLawTypeInfoVOS()); }
利用递归回调遍历树
private void getTypeIds(Listlongs, List vo) { for (LawTypeInfoVO v : vo ) { longs.add(v.getId()); if (v.getLawTypeInfoVOS() != null && v.getLawTypeInfoVOS().size() > 0) { getTypeIds(longs, v.getLawTypeInfoVOS()); } } }



