1.建菜单表
CREATE TABLE `t_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
2.造一些数据
注意:根节点的pid=0,其他节点的pid跟id是有对应的父子关系的。
3.撸代码
这里只展示递归生成树的代码,查询数据库的操作非常简单,只用到了一句sql,然后将结果封装成List。
select id, pid, `name` from t_menu
service代码:
@Override
public List<Menu> tree() {
// 查询出所有的菜单数据集合
List<Menu> menus = menuMapper.selectAll();
// 生成菜单树
return createTree(0, menus);
}/**
* 递归生成菜单树
*/
private List<Menu> createTree(int pid, List<Menu> menus) {
List<Menu> treeMenu = new ArrayList<>();
for (Menu menu : menus) {
if (pid == menu.getPid()) {
treeMenu.add(menu);
menu.setChildren(createTree(menu.getId(), menus));
}
}
return treeMenu;
}