递归循环获取多层级目录

需求:实现一级,二级,三级...多层级目录菜单展示

建表:

CREATE TABLE `ImageMenu` (
  `menu_id` varchar(32) NOT NULL COMMENT '菜单id',
  `title` varchar(64) NOT NULL COMMENT '菜单名称',
  `parent_id` varchar(32) NOT NULL COMMENT '父类目录id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
  `remark` varchar(64) DEFAULT NULL COMMENT '备注',
  `children` varchar(100) DEFAULT NULL COMMENT '子级列表'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文件目录表'

模拟数据:

INSERT INTO ImageMenu(menu_id,title,parent_id,create_time,creator,remark,children) VALUES
	 ('001','一级父目录-1','0','2021-03-16 00:00:00','lrj','1级 目录',NULL),
	 ('001001','二级目录-1-1','001','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('001002','二级目录-1-2','001','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('001003','二级目录-1-3','001','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('002','一级父目录-2','0','2021-03-16 00:00:00','lrj','1级 目录',NULL),
	 ('003','一级父目录-3','0','2021-03-16 00:00:00','lrj','1级 目录',NULL),
	 ('003001','二级目录-3-1','003','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('003002','二级目录-3-2','003','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('004','一级父目录-4 ','0','2021-03-16 00:00:00','lrj','1级 目录',NULL),
	 ('004001','二级目录-4-1','004','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('004002','二级目录-4-2','004','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('004003','二级目录-4-3','004','2021-03-16 00:00:00','lrj','2级 目录',NULL),
	 ('004001001',三级目录-4-1-1','004001','2021-03-16 00:00:00','lrj','3级目录',NULL),
	 ('004001002','三级目录-4-1-2','004001','2021-03-16 00:00:00','lrj','3级目录',NULL);

创建实体类 menu.class,dao层mapper,不在赘述

逻辑实现:

 public DetailResponse queryImageList() {

        DetailResponse response = new DetailResponse();
        List<ImageMenu> data = imageMapper.selectList();

        List<ImageMenu> imageList = new ArrayList<>();

        for (ImageMenu imageMenu : data) {

            if (imageMenu.getParentId().equals("0")) {
                imageList.add(imageMenu);
            }
        }

        // 为一级菜单设置子菜单,getChild是递归调用的
        for (ImageMenu imageMenu : imageList) {

            imageMenu.setChildren(getChilde(imageMenu.getMenuId(), data));
        }

        response.setResult(GlobalResponseCode.SUCCESS);
        response.setData(imageList);
        return response;

    }



 private List<ImageMenu> getChilde(String fileSource, List<ImageMenu> rootList) {

        List<ImageMenu> childeList = new ArrayList<>();
        for (ImageMenu imageMenu : rootList) {

            if (imageMenu.getParentId().equals(fileSource)) {

                childeList.add(imageMenu);
            }
        }

        for (ImageMenu imageMenu : childeList) {

            imageMenu.setChildren(getChilde(imageMenu.getMenuId(), rootList));

        }
        if (childeList.size() == 0) {
            return null;
        }
        return childeList;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中编写多层级循环的UI测试脚本,你可以使用一些测试框架和库来简化操作。一个常用的库是`Selenium`,它可以模拟用户在网页上的操作。 以下是一个示例,演示了如何编写多层级循环的UI测试脚本: ```python from selenium import webdriver def process_element(element): # 处理当前元素 # ... # 遍历子元素 for child_element in element.find_elements_by_xpath('.//*'): process_element(child_element) # 递归调用处理子元素 # 创建浏览器驱动 driver = webdriver.Chrome() # 打开网页 driver.get('http://example.com') # 获取根元素 root_element = driver.find_element_by_xpath('//html') # 处理元素及其子元素 process_element(root_element) # 关闭浏览器 driver.quit() ``` 在这个示例中,我们使用了`Selenium`库来模拟浏览器行为。首先,我们创建一个浏览器驱动,然后打开指定的网页。接着,通过XPath定位到根元素,并通过递归调用`process_element`函数来处理元素及其子元素。 在`process_element`函数中,你可以编写具体的操作逻辑,例如查找页面元素、点击按钮、输入文本等。通过`find_elements_by_xpath`方法,我们可以获取当前元素的所有子元素,并对每个子元素进行递归处理。 最后,记得关闭浏览器,以释放资源。 当然,具体的脚本编写方式还会根据你的需求和具体的测试框架而有所差异。你可以根据实际情况选择合适的库和方法来编写你的UI测试脚本。 希望这个示例能帮到你!如果你还有其他问题,请随提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值