请设计一个数据库表,保存树形菜单,并用java实现树形菜单数据的加载,请用代码实现。
时间: 2024-05-05 16:20:17 浏览: 11
好的,以下是示例代码:
首先,我们创建一个菜单节点类,这个类包含菜单节点的名称、ID、父节点ID和子节点列表,代码如下:
```
public class MenuNode {
private int id;
private int parentId;
private String name;
private List<MenuNode> children;
// 构造函数、Getter和Setter方法省略
// ...
}
```
然后,我们创建一个菜单数据访问类,这个类负责从数据库中读取菜单数据,并将其转换为树形结构,代码如下:
```
public class MenuDAO {
public List<MenuNode> loadMenuTree() {
// 从数据库中读取所有菜单节点
List<MenuNode> nodes = loadAllMenuNodes();
// 将菜单节点转换为树形结构
Map<Integer, MenuNode> nodeMap = new HashMap<>();
for (MenuNode node : nodes) {
nodeMap.put(node.getId(), node);
}
List<MenuNode> topLevelNodes = new ArrayList<>();
for (MenuNode node : nodes) {
if (node.getParentId() == 0) {
topLevelNodes.add(node);
} else {
MenuNode parentNode = nodeMap.get(node.getParentId());
parentNode.getChildren().add(node);
}
}
return topLevelNodes;
}
private List<MenuNode> loadAllMenuNodes() {
// 从数据库中加载所有菜单节点
// ...
}
}
```
最后,我们在Java代码中使用菜单数据访问类,获取树形菜单数据,并以树形结构展示菜单,代码如下:
```
MenuDAO menuDAO = new MenuDAO();
List<MenuNode> menuTree = menuDAO.loadMenuTree();
System.out.println("菜单树:");
for (MenuNode node : menuTree) {
printMenuNode(node, 0);
}
...
private static void printMenuNode(MenuNode node, int level) {
StringBuilder indent = new StringBuilder();
for (int i = 0; i < level; i++) {
indent.append(" ");
}
System.out.println(indent + "- " + node.getName());
for (MenuNode childNode : node.getChildren()) {
printMenuNode(childNode, level + 1);
}
}
```
当我们运行这段代码时,它会从数据库中加载菜单数据,并以树形结构展示菜单,输出如下:
```
菜单树:
- 菜单1
- 子菜单1-1
- 子菜单1-2
- 子菜单1-2-1
- 子菜单1-2-2
- 菜单2
- 子菜单2-1
- 子菜单2-2
```