用java mybatis实现 菜单查询 代码
时间: 2023-03-29 13:00:33 浏览: 92
好的,我可以回答这个问题。以下是一个用 Java MyBatis 实现菜单查询的示例代码:
首先,我们需要定义一个菜单实体类,例如:
public class Menu {
private int id;
private String name;
private String url;
private int parentId;
// 省略 getter 和 setter 方法
}
然后,我们需要定义一个 Mapper 接口,例如:
public interface MenuMapper {
List<Menu> selectMenusByParentId(int parentId);
}
最后,我们需要编写对应的 SQL 语句,例如:
<select id="selectMenusByParentId" resultType="Menu">
SELECT * FROM menu WHERE parent_id = #{parentId}
</select>
这样,我们就可以通过调用 MenuMapper 接口中的 selectMenusByParentId 方法来查询指定父菜单下的所有子菜单了。
相关问题
java后端使用Mybatis实现多级菜单管理
实现多级菜单管理可以通过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);
}
```
使用以上方法,可以方便地实现多级菜单管理。
java后端使用Mybatis查询多级分类菜单
可以使用Mybatis的递归查询实现多级分类菜单的查询。具体步骤如下:
1. 定义分类菜单的实体类,包含id、name、parentId等属性。
2. 定义分类菜单的Mapper接口,在接口中定义递归查询方法,如下所示:
```java
public interface CategoryMapper {
// 查询指定父级分类下的所有子分类
List<Category> listByParentId(Integer parentId);
// 递归查询指定父级分类下的所有子分类
List<Category> listByParentIdRecursive(Integer parentId);
}
```
3. 在Mapper.xml文件中实现递归查询方法,如下所示:
```xml
<mapper namespace="com.example.mapper.CategoryMapper">
<!-- 查询指定父级分类下的所有子分类 -->
<select id="listByParentId" resultType="com.example.entity.Category">
select * from category where parent_id = #{parentId}
</select>
<!-- 递归查询指定父级分类下的所有子分类 -->
<select id="listByParentIdRecursive" resultType="com.example.entity.Category">
with recursive cte(id, name, parent_id) as (
select id, name, parent_id from category where parent_id = #{parentId}
union all
select c.id, c.name, c.parent_id from category c join cte on c.parent_id = cte.id
)
select * from cte
</select>
</mapper>
```
4. 在Java代码中调用递归查询方法,如下所示:
```java
@Autowired
private CategoryMapper categoryMapper;
public List<Category> listByParentIdRecursive(Integer parentId) {
return categoryMapper.listByParentIdRecursive(parentId);
}
```
使用以上方法,可以方便地查询多级分类菜单。
阅读全文