zoukankan      html  css  js  c++  java
  • java递归查询方法

    一、需求

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

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

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

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

    二、解决

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

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

      /**
         * 根据给定的id,查询其下的第一课、第一节(不只适用于章课节三级,如果下面还有级别的目录,也可查
         * 
         * 询出)
         * 
         * @param l    是教材id
         * @param list  
         * @return
         */
        public void getSubChapter(long l, List<BookChapter> list) {
            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<BookChapter> li = this.getJdbcTemplate().query(sql, params,new BookChapterRowMapper());
                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);
            }
        }

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

  • 相关阅读:
    概率图模型课堂笔记:2.4 取样方法
    概率图模型课堂笔记:2.2 置信度传播
    2018秋季学期学习总结
    人生路上影响最大的三位老师
    抓老鼠啊~亏了还是赚了?
    币值转换
    自我介绍
    打印沙漏
    2019春第七周作业
    第六周编程总结
  • 原文地址:https://www.cnblogs.com/brolanda/p/4524055.html
Copyright © 2011-2022 走看看