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代码:
@Overridepublic 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;}
返回数据格式如下: