Mybatis resultMap用法之系统菜单实现

版权声明:本文为博主原创文章,如需转载请注明原文出处: 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);

猜你喜欢

转载自blog.csdn.net/u010979642/article/details/91314933
今日推荐