java + mybatis 查询二级菜单
时间: 2023-09-30 17:08:58 浏览: 95
二级菜单栏的
假设你有以下的菜单表(menu):
| id | name | parent_id |
|----|------|-----------|
| 1 | 菜单1 | null |
| 2 | 菜单2 | null |
| 3 | 菜单1-1 | 1 |
| 4 | 菜单1-2 | 1 |
| 5 | 菜单2-1 | 2 |
其中,parent_id 表示该菜单的父级菜单的 id,如果该菜单没有父级菜单,则 parent_id 为 null。
下面是查询二级菜单的 SQL:
```sql
SELECT m1.id, m1.name, m2.id AS sub_id, m2.name AS sub_name
FROM menu m1
LEFT JOIN menu m2 ON m1.id = m2.parent_id
WHERE m1.parent_id IS NULL AND m2.parent_id IS NOT NULL;
```
这里使用了自连接和左连接,将菜单表与自身连接,并筛选出 parent_id 为 null 的一级菜单,和 parent_id 不为 null 的二级菜单。同时,使用别名给一级菜单和二级菜单取名,方便后续处理。
在 Java 中,使用 MyBatis 可以将上面的 SQL 封装成一个 mapper 接口的方法,如下:
```java
public interface MenuMapper {
List<Map<String, Object>> selectSubMenus();
}
```
这里返回的是一个 List<Map<String, Object>>,其中每个 Map 对应一条记录,包含 id、name、sub_id 和 sub_name 四个字段,表示父级菜单和对应的二级菜单。具体的 mapper.xml 可以参考下面的代码:
```xml
<!-- MenuMapper.xml -->
<mapper namespace="com.example.MenuMapper">
<select id="selectSubMenus" resultType="java.util.Map">
SELECT m1.id, m1.name, m2.id AS sub_id, m2.name AS sub_name
FROM menu m1
LEFT JOIN menu m2 ON m1.id = m2.parent_id
WHERE m1.parent_id IS NULL AND m2.parent_id IS NOT NULL;
</select>
</mapper>
```
阅读全文