精华内容
下载资源
问答
  • 2021-02-12 09:51:27

    一、需求

    项目里要让用户能够设置所选择教材的章课节,以针对章课节提供相应的题目供用户做题。

    设计:用户设置了教材后,首次登录,进行章节设置时。默认为用户选择第一章、第一课、第一节。

    思路:用户访问页面,章一栏显示所有章,课一栏显示第一章下所有课程,节一栏显示第一章、第一课下的所有节。然后获取用户当前选择的章课节信息。如果当前用户没有设置过该教材的章课节,就为其设置默认的第一章、第一课、第一节。

    数据库设计:此处将章课节所有信息存放到一张表中,可递归查询。最上一级章的parentid是教材的id。故给一个教材id便可以查找到其下所有的章课节信息。

    二、解决

    已设置的我们这里不讨论,只需要到库中查询对应的章课节即可。

    那么对于默认第一章第一课第一节,我们这里使用一个递归函数将查询的结果存放到一个list中

    /*** 根据给定的id,查询其下的第一课、第一节(不只适用于章课节三级,如果下面还有级别的目录,也可查

    *

    * 询出)

    *

    *@paraml    是教材id

    *@paramlist

    *@return

    */

    public void getSubChapter(long l, Listlist) {

    BookChapter c= null;

    String sql= "SELECT D.chapter_id chapter_id, D .chapter_name chapter_name, D . LEVELS LEVELS FROM "

    + "( SELECT * FROM mic_study_book_chapter c WHERE c.parent_chapter_id =? ORDER BY c.code ) D WHERE ROWNUM = 1 ";

    Object[] params={ l };try{

    logger.info(sql.toString().replaceAll("\\?", "{}"), params);

    List li = this.getJdbcTemplate().query(sql, params,newBookChapterRowMapper());if(li.size() != 0){

    c= li.get(0);if (c != null) {

    list.add(c);

    getSubChapter(c.getId(), list);//递归查询

    }

    }

    }catch(Exception e) {

    logger.error(e.getMessage(),e);

    }

    }

    递归查询的特点:函数方法自己掉用自己,通过某个条件判断跳出最后一个被调用的递归方法。

    更多相关内容
  • java递归查询

    千次阅读 2021-12-06 21:23:16
    递归建立数据库的字段要建立pid 既pid是父id 这里的pid要能在id找到 找到就说明当前id的组织是父组织 如果找不到就说明的顶级id 图中的主菜单1就是顶级组织 public Menu getMenuTree() { //先查询顶级目录 ...

    递归建立数据库的字段要建立pid
    既pid是父id
    在这里插入图片描述
    这里的pid要能在id找到 找到就说明当前id的组织是父组织 如果找不到就说明的顶级id 图中的主菜单1就是顶级组织

      public Menu getMenuTree() {
            //先查询顶级目录
            LambdaQueryWrapper<Menu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
            menuLambdaQueryWrapper.eq(Menu::getPid, "0");
            Menu menusBase = menuMapper.selectOne(menuLambdaQueryWrapper);
            //查询除了顶级组织以外的组织
            LambdaQueryWrapper<Menu> menuLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
            menuLambdaQueryWrapper2.ne(Menu::getPid, "0");
            List<Menu> menuLNotBase = menuMapper.selectList(menuLambdaQueryWrapper2);
            List<Menu> menus = iterateMenus(menuLNotBase, menusBase.getId());
            menusBase.setMenuChildren(menus);
            return menusBase;
        }
    

    反复调用iterateMenus方法 直到循环遍历结束

        /**
         * 多级组织查询方法
         *
         * @param menuVoList 不包含最高层次组织的组织集合
         * @param pid        父类id
         * @return
         */
        public List<Menu> iterateMenus(List<Menu> menuVoList, String pid) {
            List<Menu> result = new ArrayList<>();
            int a =0;
            for (Menu menu : menuVoList) {
                //获取菜单的id
                String menuid = menu.getId();
                //获取菜单的父id
                String parentid = menu.getPid();
    
                    if (parentid.equals(pid)) {
                        //递归查询当前子菜单的子菜单
                        List<Menu> iterateMenu = iterateMenus(menuVoList, menuid);
                        menu.setMenuChildren(iterateMenu);
                        result.add(menu);
                    }
            }
            return result;
        }
    
    

    Entity有些字段不需要 我加是因为自己的业务

    @Data
    @NoArgsConstructor
    @TableName("Menu")
    public class Menu {
    
        private String  id;
        private String name;
        private String pid;
        @TableField(exist = false)
        private List<Menu> menuChildren;
        @TableField(exist = false)
        private Boolean nextRank;
    }
    
    展开全文
  • } //递归实现查询多级类目 public ExamCategory fillMenuNode(ExamCategory examCategory) { ExamCategory examCategorySearch = new ExamCategory(); examCategorySearch.setParentId( examCategory.getCategoryId...

    类目表是多级目录表,数据如下:

    想获取所有数据的多级目录,代码如下:

      /**
         * 获取树形接口的 类目
         *
         * @return
         */
        @Override
        public List<ExamCategory> selectExamCategoryTreeList() {
            //1、 获取所有的一级目录
            ExamCategory examCategory = new ExamCategory();
            examCategory.setParentId( 0 );
            List<ExamCategory> examCategoryList = examCategoryDao.selectExamCategoryList( examCategory );
            
            List<ExamCategory> parentList = new ArrayList<>();
            for (ExamCategory category : examCategoryList) {
                if (category.getParentId().intValue() == 0) {
                    parentList.add( category );
                }
            }
    
            //获取一级目录下的多级目录
            if (parentList != null) {
                for (ExamCategory category : parentList) {
                    fillMenuNode( category );
                }
            }
    
            return parentList;
        }
    
    
        //递归实现查询多级类目
        public ExamCategory fillMenuNode(ExamCategory examCategory) {
            ExamCategory examCategorySearch = new ExamCategory();
            examCategorySearch.setParentId( examCategory.getCategoryId() );
            List<ExamCategory> examCategoryList = examCategoryDao.selectExamCategoryList( examCategorySearch );
            if (CollectionUtils.isEmpty( examCategoryList )) {
                return examCategory;
            }
            List<ExamCategory> subMenuList = examCategoryList.stream().map( subMenu -> fillMenuNode( subMenu ) ).collect( Collectors.toList() );//递归实现查询多级菜单
            examCategory.setChildrenList( subMenuList );
            return examCategory;
        }

    展开全文
  • 以前也做过这种递归的,但是太久没做,一上来,竟然差点给自己搞懵了。所以决定记录下来,供自己以后查阅,也希望可以帮到有需要的朋友。直接上代码。 /** * 根据父节点 id查询所有子节点id集合(包括自身id) ...

    最近项目中遇到了一个普通需求,在根据目录节点id查询的时候,要求连带把该目录下的子节点一起查出。以前也做过这种递归的,但是太久没做,一上来,竟然差点给自己搞懵了。所以决定记录下来,供自己以后查阅,也希望可以帮到有需要的朋友。直接上代码。

     /**
         * 根据父节点 id查询所有子节点id集合(包括自身id)
         *
         * @param parentId 父节点id
         * @param clientId 客户端id
         * @return List<Long> 子节点id集合(包括自身id)
         */
        @Override
        public List<Long> getByParentId(Long parentId, Long clientId) {
            //查询出所有目录
            List<CatalogueInfo> catalogueInfos = lambdaQuery().eq(CatalogueInfo::getClientId, clientId).
                    eq(CatalogueInfo::getUseFlag, "1").select(CatalogueInfo::getId, CatalogueInfo::getParentId).list();
            //根据目录的parentId, id把所有包含子目录的目录分组为map
            ImmutableListMultimap<Long, Long> catalogueInfoMap = catalogueInfos.stream().collect(ImmutableListMultimap.toImmutableListMultimap
                    (CatalogueInfo::getParentId, CatalogueInfo::getId));
            //查询parentId下的所有子目录id
            List<Long> childIds = catalogueInfoMap.get(parentId);
            //最终返回的所有符合条件的目录id
            ArrayList<Long> resultIds = new ArrayList<>(childIds);
            //将父id添加
            resultIds.add(parentId);
            //递归查询子节点的子节点
            reduce(childIds, catalogueInfoMap, resultIds);
            return resultIds;
        }

    clientId:这个只是我查询所有目录业务中需要用到的参数,具体根据实际需求查出所有即可。

    ImmutableListMultimap<Long, Long> catalogueInfoMap = catalogueInfos.stream().collect(ImmutableListMultimap.toImmutableListMultimap
                    (CatalogueInfo::getParentId, CatalogueInfo::getId));

    这块代码主要是将所有目录分组,注意,只有当该目录下有子目录时候,会将该目录id作为key,子目录id作为value,这里的value是一个list集合。后面递归的时候,其实就是通过这个分组后的map,递归拿到子目录节点id,就是下方的List<Long> ids = catalogueInfoMap.get(id);

    递归方法

        /**
         * 递归查询所有子节点
         *
         * @param childIds         待遍历id集合
         * @param catalogueInfoMap 分组map
         * @param resultIds        满足条件的id集合
         */
        private void reduce(List<Long> childIds, ImmutableListMultimap<Long, Long> catalogueInfoMap, ArrayList<Long> resultIds) {
            //递归查询子节点的子节点,将所有的子节点添加到resultIds
            for (Long id : childIds) {
                List<Long> ids = catalogueInfoMap.get(id);
                if (ids.isEmpty()) {
                    continue;
                }
                resultIds.addAll(ids);
                reduce(ids, catalogueInfoMap, resultIds);
            }
        }

    展开全文
  • @Override public List<SvCatalog> treeSvCatalog(String id) { // 从数据库获取所有,减少数据库压力 List<SvCatalog>... //定义新的list存储查询到的数据 List<SvCatalog> cata
  • 例如区域的省市县联动,中,通过查询省的id,查处这个省下边的所有市以及市下边的县等操作,就可以通过递归算法来查询我使用的框架是ssm,主要是在service层做判断private List getRegionList(String id){List list=...
  • 主要介绍了Java递归算法遍历部门代码示例,具有一定借鉴价值,需要的朋友可以参考下。
  • Java 递归查询组织机构树

    千次阅读 2020-11-15 15:01:16
    需求:现有一个A集合(机构id集合),需要利用A集合查询出集合中所有机构的子级机构,层级(不知道一共有多少级),最终返回所有的子级机构(就是返回一个childOrganList,不包括A集合) 文章目录代码实现聊聊递归...
  • java树形结构递归查询

    2018-09-04 17:24:08
    * 根据等级查询类目树 * * @param level * @return */ @Override public List<CategoryTreeDTO> queryCategoryTree(Integer level) { //查询当前级别下类目 List<CategoryDO> list = categoryDAO.list...
  • 如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实现的,下面我们使用Java来实现递归查询树形...
  • java 递归查询省市区树形结构

    千次阅读 2021-04-08 14:25:16
    具体代码实现如下: @RequestMapping("getTree") public Map<String, Object> getTree(int id) { Map<String, Object> map = new HashMap<... ChinaCitys province = dao.... //查询出一个省 if (pro
  • public List<Map<String, Object>>... //查询出所有的一级菜单[pid=0为一级菜单] List<Menu> treeMenu = menuServiceImpl.selectByPid(0); List<Map<String, Object>...
  • <select id="selectChildren" parameterType="java.util.Map" resultMap="userIdTree"> SELECT u.id FROM hip.`core_user` u WHERE u.`PARENT_ID` =#{id} AND (SELECT COUNT(1) FROM core_channel c WHERE ...
  • Java 递归查询部门树形结构数据

    万次阅读 多人点赞 2019-05-21 00:24:48
    说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1、数据库表:department ... * 递归查询部门 ...到这里,递归查询部门树形结构数据就完成了
  • 使用递归实现,字符串模糊匹配,看设置允许匹配错误数。
  • //查询当前人 List<User> users = userDao.selectByDepartmentId(department.getId()); departmentResp.setUserList(users); list.add(departmentResp); }); } String s = JSONObject.toJSONString(list); ...
  • java递归查询数据库树

    千次阅读 2018-08-21 21:56:31
    查询第一层的数据,然后调用递归循环第一层的数据,查询父Id等于第一层的Id,执行完成后第一层一下的所有数据就全部查询出来了。。。 场景描述 :每个应用(最顶层,树的根) 下面是多级菜单 每个菜单下是多个...
  • Java 递归查询树形结构

    千次阅读 2021-12-06 17:17:22
    Java 递归查询树形结构
  • id name parent_id 1 qq null 2 qqw null 3 www null 4 www 1 5 wwwf 1 6 dsf 1 7 asdfasf 1 8 dasfdasf 2 9 df 2 10 dfd ...
  • 查询子级菜单递归查询具体实现方法1(JAVA8):  public void getTreeCategory() { //查询所有的分类 List&lt;VipGoodsCategory&gt; vipGoodsCategoryList = vipGoodsCategoryService....
  • Java递归方法 /** * * @param pid 父菜单ID * @return */ public List&lt;WsMenu&gt; selectOneList(Integer pid) { //fList是递归查询条件 List&lt;Integer&gt; fL...
  • 下面小编就为大家带来一篇Java递归求和的两种简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java递归查询数据库数据

    千次阅读 2018-03-22 14:52:55
    查询第一层的数据,然后调用递归循环第一层的数据,查询父Id等于第一层的Id,执行完成后第一层一下的所有数据就全部查询出来了。。。public List&lt;Information&gt; getTreeList(Integer topId) { ...
  • 该案例是实际开发中运用,java递归查询分类及分类下所有子分类。代码走起:1.jsp页面布局样式这里不再介绍,js业务逻辑展示分类树形结构如下:/** * 商品分类操作 */ /** * 初始化 */ $(function(){ //加载树 ...
  • java递归查询菜单层级

    千次阅读 2020-01-16 20:49:44
    说到菜单,大家都知道父菜单下面有子菜单,子菜单下面还有子菜单,那么如何实现这个递归获取菜单呢? public List<ClassificationVo> findAllClassification() { //查询所有菜单 List<ClassificationVo...
  • Java递归算法

    2020-12-22 17:40:01
    Java递归算法是基于Java语言实现的递归算法。  递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。  ...
  • java递归查询公司下所有部门及子部门

    万次阅读 多人点赞 2016-11-25 19:58:34
    查询公司下所有子部门及子部门: 原型: 1.创建公司和部门实体: CompanyVos: package com.suwei.sysMng.vo; import java.io.Serializable; import java.util.List; public class CompanyVos implements ...
  • /** * 获取无限级的类别资源 */ @Override public List<Object> findTypeTree() ... getChildren()方法传入一级类别的id 作为父id查询出其子类别,然后递归掉用getChildren()方法 实现树形菜单结构树  
  • 有个级联菜单 1-- ---1-1 ------1-1-1 2--- 2---1 -------2-1-1 我要模糊查询“1”关键字 我要把带“1”的全部查出来,如果是二级菜单要把一级...我要把我想要的结果放在一个map或者list中 这个【递归】该怎么写。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 399,772
精华内容 159,908
关键字:

java递归查询

java 订阅