表转换为map树

Controller

@RestController
@RequestMapping("/menus")
public class MenuController {

    @Autowired
    private IMenuService menuService;

    /**
     * 获取菜单
     *
     * @return menu
     */
    @GetMapping()
    public List<Menu> listMenu() {
        List<Menu> menu = menuService.menu();
        return menu;
    }
}

mapper

@Mapper
public interface MenuMapper {

    List<Menu> menu();

}

Pojo

@Data
public class Menu {

    private int id;
    private int pid;
    private String name;
    private String path;
    private String icon;
    private List<Menu> children;

}

interface

public interface IMenuService {

    List<Menu> menu();

}

Service

@Service
public class MenuServiceImpl implements IMenuService {

    @Autowired
    private MenuMapper menuMapper;

    /**
     * 获取菜单数据
     *
     * @return
     */
    public List<Menu> menu() {
        List<Menu> list = menuMapper.menu();

        //获取为父节点的Menu,并且赋值其子节点
        for (Menu rg : list) {
            if (rg.getPid() == 1)
                rg.setChildren(getChild(rg, list));
            else
                rg.setChildren(null);
        }

        //只返回ParentId为0,代表其为审查指南
        List<Menu> returnList = new ArrayList<>();
        for (Menu rg : list)
            if (rg.getPid() == 1)
                returnList.add(rg);

        return returnList;
    }

    public List<Menu> getChild(Menu root, List<Menu> all) {

        // 创建一个集合,存储父节点的子节点
        List<Menu> childs = new ArrayList<>();

        //将 集合中父id == 当前父节点id,即代表该rg是当前父节点的子节点之一
        for (Menu rg : all) {
            if (rg.getPid() == root.getId())
                childs.add(rg);
        }

        return childs;
    }

}

xml

<mapper namespace="com.learn.mapper.MenuMapper">

    <select id="menu" resultType="com.learn.model.Menu">
        select *
        from menu_tbl;
    </select>

</mapper>
posted @ 2023-07-07 14:21  杨业壮  阅读(5)  评论(0编辑  收藏  举报