版权声明:本文为博主原创文章,如需转载请注明原文出处: https://blog.csdn.net/u010979642/article/details/91314933
1. 实体对象 MenuDTO
@Data
public class MenuDTO {
/**
* 菜单ID
* */
private Long id;
/**
* 父节点ID
* */
private Long parentId;
/**
* 菜单名称
* */
private String menuName;
/**
* 菜单关联地址
* */
private String menuUrl;
/**
* 子菜单列表
* */
private List<MenuDTO> childMenu;
}
2. Mapper映射文件 SysMenuMapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.answer.ai.mapper.SysMenuMapper" >
<resultMap id="MenuResultMap" type="Menu">
<id property="id" column="id" />
<result property="menuName" column="menu_name" />
<result property="menuUrl" column="menu_url" />
<result property="parentId" column="parent_id" />
<collection property="childMenu" ofType="Menu" select="findRecordsByParamsPage" column="{parentId=id}" />
</resultMap>
<select id="findRecordsByParamsPage" resultMap="MenuResultMap">
SELECT id, parent_id, menu_name, menu_url
FROM ai_sys_menu
WHERE 1 = 1 AND status = 1
<choose>
<when test="parentId != null">
AND parent_id = #{parentId}
</when>
<otherwise>
AND parent_id = 0
</otherwise>
</choose>
ORDER BY sort_order
</select>
</mapper>
-
property=“childMenu” 对应的是菜单中的子级菜单列表
-
ofType=“Menu” 对应返回数据的类型
-
select=“findRecordsByParamsPage” 指定了 SELECT 语句的 id
-
column="{parentId=id}" 则是参数的表达式
MenuResultMap 整体的含义理解
: 通过 findRecordsByParamsPage 这个SELECT语句来获取一级菜单中的 childMenu 属性结果;然后再递归查询, 查询传入的参数是column="{parentId=id}"
即: 一级菜单中的查询结果 id 当成参数 parentId 继续通过 findRecordsByParamsPage 进行查询, 依次类推…
3. 运行输出
{
"code": "0000",
"desc": "success",
"data": [{
"id": 1,
"parentId": 0,
"menuName": "AI管理系统",
"menuUrl": "/",
"childMenu": [{
"id": 2,
"parentId": 1,
"menuName": "用户管理",
"menuUrl": "/user",
"childMenu": [{
"id": 7,
"parentId": 2,
"menuName": "用户列表",
"menuUrl": "/user/list",
"childMenu": []
}]
}, {
"id": 3,
"parentId": 1,
"menuName": "智能卡管理",
"menuUrl": "/card",
"childMenu": [{
"id": 8,
"parentId": 3,
"menuName": "新增智能卡",
"menuUrl": "/card/add",
"childMenu": []
}, {
"id": 9,
"parentId": 3,
"menuName": "智能卡列表",
"menuUrl": "/card/list",
"childMenu": []
}]
}, {
"id": 4,
"parentId": 1,
"menuName": "订单管理",
"menuUrl": "/order",
"childMenu": [{
"id": 10,
"parentId": 4,
"menuName": "订单列表",
"menuUrl": "/order/list",
"childMenu": []
}]
}, {
"id": 5,
"parentId": 1,
"menuName": "活动管理",
"menuUrl": "/activity",
"childMenu": [{
"id": 11,
"parentId": 5,
"menuName": "活动列表",
"menuUrl": "/activity/list",
"childMenu": []
}]
}, {
"id": 6,
"parentId": 1,
"menuName": "预警管理",
"menuUrl": "/warn",
"childMenu": [{
"id": 12,
"parentId": 6,
"menuName": "系统预警",
"menuUrl": "/warn/system",
"childMenu": [{
"id": 15,
"parentId": 12,
"menuName": "系统异常预警",
"menuUrl": "/warn/system/exception",
"childMenu": []
}, {
"id": 16,
"parentId": 12,
"menuName": "系统错误预警",
"menuUrl": "/warn/system/error",
"childMenu": []
}]
}, {
"id": 13,
"parentId": 6,
"menuName": "智能卡预警",
"menuUrl": "/warn/card",
"childMenu": []
}, {
"id": 14,
"parentId": 6,
"menuName": "订单预警",
"menuUrl": "/warn/order",
"childMenu": []
}]
}]
}]
}
4. 数据库
4.1 表结构
CREATE TABLE `ai_sys_menu` (
`id` bigint(18) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`parent_id` bigint(18) NOT NULL COMMENT '父节点ID',
`menu_name` varchar(30) NOT NULL COMMENT '菜单名称',
`menu_url` varchar(255) NOT NULL COMMENT '菜单关联地址',
`sort_order` tinyint(1) DEFAULT NULL COMMENT '顺序',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '菜单状态\r\n0: 停用\r\n1: 启用',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='系统-菜单';
4.2 表数据
INSERT INTO `ai_sys_menu` VALUES ('1', '0', 'AI管理系统', '/', '1', '1', '2019-06-08 11:09:39', null);
INSERT INTO `ai_sys_menu` VALUES ('2', '1', '用户管理', '/user', '1', '1', '2019-06-08 11:16:13', null);
INSERT INTO `ai_sys_menu` VALUES ('3', '1', '智能卡管理', '/card', '2', '1', '2019-06-08 11:09:41', null);
INSERT INTO `ai_sys_menu` VALUES ('4', '1', '订单管理', '/order', '3', '1', '2019-06-08 11:09:43', null);
INSERT INTO `ai_sys_menu` VALUES ('5', '1', '活动管理', '/activity', '4', '1', '2019-06-08 11:09:45', null);
INSERT INTO `ai_sys_menu` VALUES ('6', '1', '预警管理', '/warn', '5', '1', '2019-06-08 11:09:47', null);
INSERT INTO `ai_sys_menu` VALUES ('7', '2', '用户列表', '/user/list', '1', '1', '2019-06-08 11:16:16', null);
INSERT INTO `ai_sys_menu` VALUES ('8', '3', '新增智能卡', '/card/add', '1', '1', '2019-06-08 11:16:18', null);
INSERT INTO `ai_sys_menu` VALUES ('9', '3', '智能卡列表', '/card/list', '2', '1', '2019-06-08 11:16:19', null);
INSERT INTO `ai_sys_menu` VALUES ('10', '4', '订单列表', '/order/list', '1', '1', '2019-06-08 11:16:21', null);
INSERT INTO `ai_sys_menu` VALUES ('11', '5', '活动列表', '/activity/list', '1', '1', '2019-06-08 11:16:22', null);
INSERT INTO `ai_sys_menu` VALUES ('12', '6', '系统预警', '/warn/system', '1', '1', '2019-06-08 11:16:23', null);
INSERT INTO `ai_sys_menu` VALUES ('13', '6', '智能卡预警', '/warn/card', '2', '1', '2019-06-08 11:16:25', null);
INSERT INTO `ai_sys_menu` VALUES ('14', '6', '订单预警', '/warn/order', '3', '1', '2019-06-08 11:16:27', null);
INSERT INTO `ai_sys_menu` VALUES ('15', '12', '系统异常预警', '/warn/system/exception', '1', '1', '2019-06-08 11:16:29', null);
INSERT INTO `ai_sys_menu` VALUES ('16', '12', '系统错误预警', '/warn/system/error', '2', '1', '2019-06-08 11:16:31', null);