java后端使用Mybatis实现多级菜单管理
时间: 2023-07-20 18:17:57 浏览: 313
实现多级菜单管理可以通过Mybatis的递归查询实现,具体步骤如下:
1. 定义菜单实体类,包含id、name、parentId、url等属性。
2. 定义菜单Mapper接口,在接口中定义递归查询方法,如下所示:
```java
public interface MenuMapper {
// 查询指定父级菜单下的所有子菜单
List<Menu> listByParentId(Integer parentId);
// 递归查询指定父级菜单下的所有子菜单
List<Menu> listByParentIdRecursive(Integer parentId);
}
```
3. 在Mapper.xml文件中实现递归查询方法,如下所示:
```xml
<mapper namespace="com.example.mapper.MenuMapper">
<!-- 查询指定父级菜单下的所有子菜单 -->
<select id="listByParentId" resultType="com.example.entity.Menu">
select * from menu where parent_id = #{parentId}
</select>
<!-- 递归查询指定父级菜单下的所有子菜单 -->
<select id="listByParentIdRecursive" resultType="com.example.entity.Menu">
with recursive cte(id, name, parent_id, url) as (
select id, name, parent_id, url from menu where parent_id = #{parentId}
union all
select c.id, c.name, c.parent_id, c.url from menu c join cte on c.parent_id = cte.id
)
select * from cte
</select>
</mapper>
```
4. 在Java代码中调用递归查询方法,如下所示:
```java
@Autowired
private MenuMapper menuMapper;
public List<Menu> listByParentIdRecursive(Integer parentId) {
return menuMapper.listByParentIdRecursive(parentId);
}
```
5. 在Controller中编写菜单管理方法,如下所示:
```java
@Autowired
private MenuService menuService;
// 查询所有菜单
@GetMapping("/menu")
public List<Menu> listMenu() {
return menuService.listByParentIdRecursive(null);
}
// 新增菜单
@PostMapping("/menu")
public void addMenu(@RequestBody Menu menu) {
menuService.addMenu(menu);
}
// 修改菜单
@PutMapping("/menu")
public void updateMenu(@RequestBody Menu menu) {
menuService.updateMenu(menu);
}
// 删除菜单
@DeleteMapping("/menu/{id}")
public void deleteMenu(@PathVariable("id") Integer id) {
menuService.deleteMenu(id);
}
```
使用以上方法,可以方便地实现多级菜单管理。
阅读全文