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);
        }
    }

遞歸查詢的特點:函數方法自己掉用自己,通過某個條件判斷跳出最后一個被調用的遞歸方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM