實現(xiàn)(樹狀圖)菜單遞歸的方法

1.數(shù)據(jù)

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 '業(yè)務(wù)員id',
  `area` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '區(qū)域',
  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.實體類的創(chuàng)建潜必。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>
    
    <!-- 查詢所有的列表亏较。用來生成樹狀圖結(jié)構(gòu)數(shù)據(jù) -->
    <select id="findAll" resultMap="CannelEntityMap">
        SELECT
            *
        FROM
            channel
    </select>
    
</mapper>

4.impl方法的編寫担败。其他的control和接口類就不寫了

    @Override
    public List<Cannel> findAll(Integer uid) {
        //權(quán)限校驗
        Integer stationUid = ValidUtils.AdminStation(uid);
        List<Cannel> CannelList = new ArrayList<Cannel>();
        //station返回2贯要,說明有權(quán)限支鸡,0沒有權(quán)限 
        if(stationUid==2) {
            List<Cannel> findAll = mapper.findAll();
            for (Cannel cannel : findAll) {
                //判斷是否是根節(jié)點冬念。為0是跟節(jié)點
                if(cannel.getParentId()==0) {
                    CannelList.add(cannel);
                }
            }
            //遍歷找到二級節(jié)點
            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;
    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牧挣,隨后出現(xiàn)的幾起案子急前,更是在濱河造成了極大的恐慌,老刑警劉巖瀑构,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆针,死亡現(xiàn)場離奇詭異,居然都是意外死亡寺晌,警方通過查閱死者的電腦和手機世吨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呻征,“玉大人另假,你說我怎么就攤上這事∨吕纾” “怎么了边篮?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵己莺,是天一觀的道長。 經(jīng)常有香客問我戈轿,道長凌受,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任思杯,我火速辦了婚禮胜蛉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘色乾。我一直安慰自己誊册,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布暖璧。 她就那樣靜靜地躺著案怯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澎办。 梳的紋絲不亂的頭發(fā)上嘲碱,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音局蚀,去河邊找鬼麦锯。 笑死,一個胖子當著我的面吹牛琅绅,可吹牛的內(nèi)容都是我干的扶欣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼千扶,長吁一口氣:“原來是場噩夢啊……” “哼料祠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起县貌,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凑懂,沒想到半個月后煤痕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡接谨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年摆碉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脓豪。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷帝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扫夜,到底是詐尸還是另有隱情楞泼,我是刑警寧澤驰徊,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堕阔,受9級特大地震影響棍厂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜超陆,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一牺弹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧时呀,春花似錦张漂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞧预,卻和暖如春屎债,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垢油。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工盆驹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滩愁。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓躯喇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硝枉。 傳聞我的和親對象是個殘疾皇子廉丽,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355