数据库中的格式
pojo类
public class UmsMenu implements Serializable { @ApiModelProperty(value = "唯一标识") private Long id; @ApiModelProperty(value = "父级ID") private Long parentId; @ApiModelProperty(value = "创建时间") private Date createdate; @ApiModelProperty(value = "菜单名称") private String title; @ApiModelProperty(value = "菜单级数") private Integer level; @ApiModelProperty(value = "菜单排序") private Integer sort; @ApiModelProperty(value = "前端名称") private String name; @ApiModelProperty(value = "前端图标") private String icon; @ApiModelProperty(value = "是否隐藏") private Integer hidden; @ApiModelProperty(value = "备用字段1") private String fbk1; @ApiModelProperty(value = "备用字段3") private String fbk2; @ApiModelProperty(value = "备用字段3") private String fbk3;
返回的vo树形结构类
public class UmsMenuNode extends UmsMenu { @ApiModelProperty(value = "子级菜单") private List<UmsMenuNode> children; }
代码实现
@Override public List<UmsMenuNode> treeList() { //得到数据库中所有的数据 UmsMenuExample example = new UmsMenuExample(); List<UmsMenu> menuList = menuMapper.selectByExample(example); //得到子父关系的list的 List<UmsMenuNode> result = menuList.stream() .filter(menu -> menu.getParentId().equals(0L)) .map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList()); return result; }
/** * 将UmsMenu转化为UmsMenuNode并设置children属性 */ private UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList) { UmsMenuNode node = new UmsMenuNode(); BeanUtils.copyProperties(menu, node); List<UmsMenuNode> children = menuList.stream() .filter(subMenu -> subMenu.getParentId().equals(menu.getId())) .map(subMenu -> covertMenuNode(subMenu, menuList)).collect(Collectors.toList()); node.setChildren(children); return node; }