实现(树状图)菜单递归的方法

1.数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for channel
-- ----------------------------
DROP TABLE IF EXISTS `channel`;
CREATE TABLE `channel`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `channel_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '渠道的名称',
  `parent_id` int(11) NULL DEFAULT NULL COMMENT '父类id',
  `salesman_id` int(11) NULL DEFAULT NULL COMMENT '业务员id',
  `area` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区域',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '渠道表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of channel
-- ----------------------------
INSERT INTO `channel` VALUES (1, '科达', 0, 1, NULL);
INSERT INTO `channel` VALUES (2, '科利达', 1, 1, NULL);
INSERT INTO `channel` VALUES (3, '科达利', 1, 1, NULL);
INSERT INTO `channel` VALUES (4, '利达科', 2, 2, NULL);
INSERT INTO `channel` VALUES (5, '利科达', 2, 2, NULL);
INSERT INTO `channel` VALUES (6, '达利科', 3, 1, NULL);
INSERT INTO `channel` VALUES (7, '达科利', 3, 2, NULL);

SET FOREIGN_KEY_CHECKS = 1;

2.实体类的创建。get和set方法深略

public class Cannel {
    private Integer id;
    private String channelName;
    private Integer parentId;
    private Integer salesmanId;
    private String area;
    
    private List<Cannel> childCannel;
    

3.mapper.xml的编写

<mapper namespace="com.kldhq.weight.mapper.kdweight.CannelMapper">

    <resultMap type="com.kldhq.weight.entity.Cannel"
        id="CannelEntityMap">
        <id column="id" property="id" />
        <result column="channel_name" property="channelName" />
        <result column="parent_id" property="parentId" />
        <result column="salesman_id" property="salesmanId" />
        <result column="area" property="area" />
    </resultMap>
    
    <!-- 查询所有的列表。用来生成树状图结构数据 -->
    <select id="findAll" resultMap="CannelEntityMap">
        SELECT
            *
        FROM
            channel
    </select>
    
</mapper>

4.impl方法的编写。其他的control和接口类就不写了

    @Override
    public List<Cannel> findAll(Integer uid) {
        //权限校验
        Integer stationUid = ValidUtils.AdminStation(uid);
        List<Cannel> CannelList = new ArrayList<Cannel>();
        //station返回2,说明有权限,0没有权限 
        if(stationUid==2) {
            List<Cannel> findAll = mapper.findAll();
            for (Cannel cannel : findAll) {
                //判断是否是根节点。为0是跟节点
                if(cannel.getParentId()==0) {
                    CannelList.add(cannel);
                }
            }
            //遍历找到二级节点
            for (Cannel cannel : CannelList) {
                List<Cannel> child = getChild(cannel.getId(),findAll);
                cannel.setChildCannel(child);
            }
        }
        return CannelList;
    }

    private List<Cannel> getChild(Integer id, List<Cannel> findAll) {
        //子菜单列表
        List<Cannel> childList = new ArrayList<>();
        for (Cannel cannel : findAll) {
            if(id.equals(cannel.getParentId())) {
                childList.add(cannel);
            }
        }
        //遍历 获取子菜单的子菜单
        for (Cannel cannel : childList) {
            List<Cannel> child = getChild(cannel.getId(),findAll);
            cannel.setChildCannel(child);
        }
        //递归出口  childList长度为0
        if (childList.size() == 0) {
            return new ArrayList<>();
        }
        return childList;
    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351