使用Java编程和springboot框架实现菜单权限表的树状结构接口,给出相应的controller层,service层,service实现类,daoc层及mapper,
时间: 2024-03-10 07:47:00 浏览: 75
DAoC - Multi Tool-开源
好的,以下是对应的代码实现:
**Controller层:**
```java
@RestController
@RequestMapping("/menu")
public class MenuController {
@Autowired
private MenuService menuService;
@GetMapping("/tree")
public List<MenuNodeVO> getMenuTree() {
return menuService.getMenuTree();
}
}
```
**Service层:**
```java
public interface MenuService {
List<MenuNodeVO> getMenuTree();
}
```
**Service实现类:**
```java
@Service
public class MenuServiceImpl implements MenuService {
@Autowired
private MenuDao menuDao;
@Override
public List<MenuNodeVO> getMenuTree() {
List<MenuDO> menuDOList = menuDao.getAllMenus();
List<MenuNodeVO> menuNodeVOList = new ArrayList<>();
Map<Long, MenuNodeVO> menuNodeVOMap = new HashMap<>();
// 先将所有MenuDO转为MenuNodeVO,并以id为key存入map中
for (MenuDO menuDO : menuDOList) {
MenuNodeVO menuNodeVO = new MenuNodeVO(menuDO.getId(), menuDO.getName(), menuDO.getParentId(), new ArrayList<>());
menuNodeVOMap.put(menuDO.getId(), menuNodeVO);
if (menuDO.getParentId() == 0) {
menuNodeVOList.add(menuNodeVO);
}
}
// 遍历map,将父节点与子节点相连
for (MenuNodeVO menuNodeVO : menuNodeVOMap.values()) {
Long parentId = menuNodeVO.getParentId();
if (parentId != 0) {
MenuNodeVO parentMenuNodeVO = menuNodeVOMap.get(parentId);
parentMenuNodeVO.getChildren().add(menuNodeVO);
}
}
return menuNodeVOList;
}
}
```
**Dao层及Mapper:**
```java
@Mapper
@Repository
public interface MenuDao {
List<MenuDO> getAllMenus();
}
```
```java
public class MenuDO {
private Long id;
private String name;
private Long parentId;
// getter和setter方法
}
```
```xml
<mapper namespace="com.example.mapper.MenuMapper">
<select id="getAllMenus" resultType="com.example.domain.MenuDO">
select id, name, parent_id from menu;
</select>
</mapper>
```
以上代码中,我们查询出所有的菜单项,并将它们转为树形结构。我们使用了一个Map来存储所有的菜单项,并以id为key,这样就可以方便地找到某个菜单项的父节点。最后,我们遍历这个Map,将父节点与子节点相连,得到树形结构。
阅读全文