关于菜单删除问题,当父级菜单选中,对应删除所有的子集菜单(能力有限,这里只写到了三级菜单)

对应的数据库的表
对应的菜单表
在这里插入图片描述
其中七张表的总体关系
在这里插入图片描述
这里我们通过字段level来判断是否是1\2\3级菜单
前端传递过来的id
第一步:我们先通过id来查找对应的菜单的等级
前端传过来的id有可能是1/2/3级别
等级为3直接删除
等级为2,先删除3再删2
等级为1先删除3再用等级二的方法

我们通过level和parentMenuId

  <!--查找菜单等级-->
    <select id="findLevel" resultType="java.lang.Integer">
         SELECT LEVEL FROM `t_menu` WHERE  id=#{id}
    </select>
    <!--查找所有等级为三的菜单id,它的父id是我们前端传过来要删除的id-->
    <select id="findLevel2Children" resultType="java.lang.Integer">
        SELECT id FROM `t_menu` WHERE parentMenuId=#{id} AND LEVEL=3
    </select>
 <!--查找所有等级为二的菜单id,它的父id是我们前端传过来要删除的id-->
    <select id="findLevel1Children" resultType="java.lang.Integer">
         SELECT id FROM `t_menu` WHERE parentMenuId=#{id} AND LEVEL=2
    </select>

第二步:查找到对应的id的菜单等级了
我们通过level1\level2\level==3,分成了三种情况的考虑.

当菜单等级为第三级时候,我们先清除和role表的关联关系,然后就可以直接删除对应的id.

当菜单等级为二级菜单的时候我们先要判断此菜单有么有子菜单,如果存在子菜单,先要遍历子集菜单先删除所有子集菜单(调用菜单等级为三级的时候方法即可),如果没有子菜单直接调用删除三级菜单的方法即可

当菜单为一级菜单的时候我们先要判断此一级菜单有没有二级子集菜单,如果有二级子集菜单,先要遍历所有的二级菜单,(这里我们直接调用上面的二级菜单的方法即可),如果没有子菜单直接调用删除三级菜单的方法即可

/**
     * 用于删除一个菜单
     *youkey
     * @param id
     */
    public void delete(Integer id) {
        //菜单等级查询
        Integer level = menuDao.findLevel(id);
        //一级菜单删除
        if (level == 1) {
            List<Integer> ids = menuDao.findLevel1Children(id);
            if (ids != null && ids.size() > 0) {
                for (Integer integer : ids) {
                    delete2(integer);
                }
            }
            delete3(id);
            return;
        }
        //二级菜单删除
        if (level == 2) {
            delete2(id);
            return;
        }
        //三菜单删除
        if (level == 3) {
            delete3(id);
            return;
        }
    }


//用于删除二级菜单的方法
    public void delete2(Integer id) {
        //查找二级菜单下的三级菜单id
        List<Integer> ids = menuDao.findLevel2Children(id);
        if (ids != null && ids.size() > 0) {
            for (Integer i : ids) {
                delete3(i);
            }
        }
        delete3(id);
    }
//用于删除三级菜单的方法
    public void delete3(Integer id) {
        menuDao.deleteAndRoleAssiation(id);
        menuDao.delete(id);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值