使用递归的方式查询菜单
效果
开始实现
service
@Override public List<Permission> queryAllMenuGuli() { //查询菜单表中所有数据 QueryWrapper<Permission> permissionQueryWrapper = new QueryWrapper<>(); permissionQueryWrapper.orderByDesc("id"); List<Permission> permissionList = baseMapper.selectList(permissionQueryWrapper); //把查询到的所有菜单list集合按照要求进行封装 List<Permission> resultList = buildPermission(permissionList); return resultList; } //把返回所有菜单list集合进行封装的方法 public static List<Permission> buildPermission(List<Permission> permissionList) { //创建一个list集合,用于数据的封装 List<Permission> finalNode = new ArrayList<>(); //把所有菜单的list集合遍历,得到顶层菜单 pid= 0的菜单,设置level是1 for (Permission permissionNode : permissionList) { if ("0".equals(permissionNode.getPid())){ permissionNode.setLevel(1); //根据顶层菜单,向里面继续查询子菜单,封装到finalNode中 finalNode.add(selectChilren(permissionNode,permissionList)); } } return finalNode; } private static Permission selectChilren(Permission permissionNode, List<Permission> permissionList) { //因为向一级菜单放入二级菜单,二级菜单放三级菜单,因此初始化一个list数组 permissionNode.setChildren(new ArrayList<Permission>()); //遍历所有菜单的list集合进行判断id和pid的值是否相同 for (Permission it : permissionList) { //判断一级菜单的id和二级菜单的pid是否相同 if (permissionNode.getId().equals(it.getPid())){ //把夫菜单的level值+1 int level = permissionNode.getLevel() +1 ; it.setLevel(level); //把查询出的子菜单放到夫菜单中 permissionNode.getChildren().add(selectChilren(it,permissionList)); } } return permissionNode; }