1. 程式人生 > >目錄樹的資料庫設計、java後臺讀取,以及前臺javascript的顯示

目錄樹的資料庫設計、java後臺讀取,以及前臺javascript的顯示

—–整理自凋落學長的筆記

我們網站肯定經常用到目錄樹

樹在java web專案中的應用 ,主要是用來儲存目錄。

即這種:

這個 應該是從資料庫查出來的 而不是寫死在頁面上的

如果每一個目錄下 都可以有0-n個目錄 是無限級別的 是儲存在資料庫中的 可維護的

1.資料庫結構設計

那麼 樹形結構如何在關係資料庫中儲存中呢?

一對多 那種儲存子目錄嗎?

這不行 ,因為是無限級別的 ,一對多隻能兩級。那如何儲存不確定的分支數量 和不確定的分支級數。

簡單的來說 ,表結構是這樣的:

有一個根節點 父級id是 0

剩下的所有節點 全部具有父節點 主鍵自增就好了 ,父級id是該級別的上一級

url

即絕對路徑 指從根節點到自己這裡的所有經過的節點名稱 中間用符號隔開

那麼到這裡大家可能想怎麼查詢? 我們可以在java後臺中,查出list 然後再組合

2.java樹結構

那麼java怎麼操作這個玩意兒?

java有List 有Map 有Set
但是沒有tree

所以我們要自定義一個物件

我們這裡可以叫menu物件

這四個屬性確實和 資料庫中的四個列

一一對應了。
但是我們如果僅僅是用List

來表達一個選單的話,沒有什麼用。

所以接著寫

每一個Menu物件 有 額外的兩個屬性。

父節點的實體物件 和子節點的Menu物件集合

於是 這就是一個 有父節點 有子節點 的物件

2.2 List《Menu》 轉化成Menu root

我們需要用java程式碼把 parentMenu物件和 set賦值

至於 set基本上就簡單了。大概就是

樹的寬度遍歷方法

先通過遍歷List

物件 找到父id是0的,根節點 然後用上面的方法 把他的子節點通過遞迴賦值

大概就是這樣了。

我們就可以得到一個Menu物件

它就是整個選單

技巧:url

為什麼要儲存絕對路徑

你可以用符號分割 大概這樣:

url.split(“/”).length = ?

通過這個長度就可以得到 這是第幾級目錄

最後從資料庫中查出來的Menu物件集合 通過這一整個大保健之後

就變成了一個Menu物件

3. 頁面展示樹

通常我們是把每個目錄包含的連線什麼的做成 文章開頭那樣目錄樹

通過一些js的tree.js這種函式庫

這裡我們為了方便用一個 列表來大概顯示出來這些目錄
<ul></ul>

這樣大家先看著 。然後自己改進

我們在上一步中 直接把 Menu物件轉化為

JSON格式

然後在頁面中使用javascript程式碼解析 json字串

也是 那個遞迴加迴圈的方法

然後通過append生成新的選單列表

<%@taglib prefix="s" uri="/struts-tags" %>
<HTML>
<HEAD>
    <script src="js/jquery-1.8.3.js" type="text/javascript"></script>
</HEAD>
<BODY id="0">
    <a href="#" onclick="show('<s:property value="json"/>')">啊啊</a>
<script type="text/javascript">
function show(jsonstr){
    alert(jsonstr);
    var m = eval("("+jsonstr+")");
    parseJson(m);
}
    function parseJson(json){
        $("#" + json.parentID).append("<ul id=" + json.ID + ">" + json.name + "</ul>");
        if(json.menuSet.length>0){
            $.each(json.menuSet,function(){
                parseJson(this);
            })
        }else{
            return;
        }
    }
</script>

</BODY>
</HTML>

沒有註釋 應該不用寫了吧。。。很簡單的

然後看執行圖

嗯 。大功告成

相關推薦

目錄資料庫設計java後臺讀取以及前臺javascript顯示

—–整理自凋落學長的筆記 我們網站肯定經常用到目錄樹 樹在java web專案中的應用 ,主要是用來儲存目錄。 即這種: 這個 應該是從資料庫查出來的 而不是寫死在頁面上的 如果每一個目錄下 都可以有0-n個目錄 是無限級別的 是儲

在一個千萬級的資料庫查尋中如何提高查詢效率?分別說出在資料庫設計SQL語句java等層面的解決方案

1)資料庫設計方面:  a. 對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 b. 應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select id f

java後臺讀取配置文件中key與value -----demo

undle ltm string 文件名 logs 配置 rip conf 返回值 public class ResourcesUtils { /* * @description:根據屬性獲取文件名 * * @param:propertyName文件的

Solr 7.5配置資料庫連線Java(學習篇(2)IK分詞器配置)

2、配置IK分詞器 (本人已把需要用到的所有工具、檔案、jar包上傳至百度網盤,有需要者可下載使用, 連結:https://pan.baidu.com/s/1G_L-h0PN2GAaPcreKuuhlg 提取碼:qnwe ) 在ikanalyzer-solr6.5資料夾中找到核心jar包

Solr 7.5配置資料庫連線Java(學習篇(1)配置)

需求:基礎Java環境JDK 1.8(solr7.5支援jdk 1.8及以上) Solr 7.5檔案 ikanalyzer-solr6.5分詞器檔案 Sublime Test編輯器 (本人已把需要用到的所有工具、檔案、jar包上傳至百度網盤,有需要者可下載使用, 連結:https://pan

多叉設計建立層次優先遍歷和深度優先遍歷

使用者的多叉樹資料儲存在一個檔案中,格式如下: aA 4 g cC z bBbB z 2 f i g 1 d d 3 x e j 每行的第一個元素指定一個節點,第二個元素表示該節點有幾個子節點,緊接著後面跟了幾個子節點; /*

js如何獲取android手機的電話號碼和聯絡人並且傳遞給PHPJava後臺

一、使用cordova代替android和iso、xcode的開發和打包          這裡先說說個人站在web的角度對cordova的一些理解:對於獲取手機的一些原生資訊,如呼叫攝像頭、獲取聯絡人,共享地理位置等,我的第一反應就是肯定要用原生的語言去做,如果js指令碼

純div實現tree目錄dome例項加實現邏輯介紹

實現邏輯: / **          *樹結構需要欄位         * 1.樹鍵         * 2.樹值         * 3.點選對應的鍵展示對應的值         *重點     

Java檔案讀取寫入資料庫

/**  * 檔案讀寫及資料入庫工具包  */ package com.xxx.file; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import

java設計模式之代理模式 以及java 回調機制的區別

-s pac 回調模式 unit 為什麽 創建 col 重要 溫習 java 代理模式就是:       將自己要做的事交給別人去做(這個別人就是代理者,自己就是被代理者),為什麽自己能做的要交給別人去做了?假如一個小學生小明,現在要寫作業,但是又想玩遊戲,他更想玩遊戲

java智能四子棋人機大戰遊戲設計(附項目以及原創PSD設計文檔)

給他 直接 發揮 假設 獲得 思路 -- 攔截 格子 本項目是使用java技術+自創“假設下子”算法開發的人機大戰四子棋遊戲客戶端。 具體項目,以及原創PSD,設計文檔,在文件末尾的百度雲連接。 一. 小組說明: 組名:CST 組長:陳飛良(C): 組員:

Java後臺json傳到前臺出現"

情況是這樣的: //將java物件轉成json字串放到session中 String jsonMenu =JSONObject.fromObject(sysMenu).toString(); session.setAttribute("sysMenu",json

PythonJava 薪資最高C# 墊底:分析什麼程式語言最賺錢!

本文主要用Python爬取拉勾網不同程式語言職位資訊,包括Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗),再用R語言對影響薪資的因素進行分析。由於拉勾網的職位資訊只顯示30頁,一頁15個職位資訊,如果單獨爬取一個城市的崗位資訊,只有幾頁是匹配的資訊,資訊量太小,分析沒有說服力。因此,本文爬取

java構造方法以及superthis關鍵字隱式呼叫顯式呼叫

首先需要明白的是,當建立java物件時,程式總是依次呼叫每個父類的非靜態初始化塊、父類構造器(總是從Object開始)執行初始化,最後才呼叫該類的非靜態初始化塊、構造器執行初始化。 為了說明問題,這裡貼出一個小例子: class Parent{static{System.

java 檔案讀取一行一行的讀取

public static void main(String[] args) throws IOException { File file = new File("c:/error.txt");

java後臺傳遞json到前臺 中文亂碼解決方法

查了兩天 都說處理response 不過我搭建的框架裡沒有response(至少表面上沒有) 然後拼接了一個String作為json傳遞到前臺 但是遇到中文 前臺就顯示“?” 試過很多辦法 都不能解決 最後放棄了字串拼接 改為物件傳遞 結果成功了 controller對應方

碼不停蹄(六):從零開始Java後臺開發跳出寫Servlet+JDBC的坑使用輕量級框架Spring+SpringMVC+MyBatis (SSM)

寫在前面:這篇文章是寫給剛剛接觸或者準備學習web/APP應用開發的同學的,分享我的後臺開發經驗,如果你對後臺開發沒有什麼概念,甚至剛剛學完Java的基礎語法,那麼請一定要仔細看我接下來提供的開發方案,這會幫你跳出很多坑,迅速找到入門後臺開發的路。 一、學點底

java讀取圖片供前臺顯示

jsp階段<img id="img" src="${ctx }/phone/getImg.ce?type=2&PATHID='+pathid+'"> </img>java

用Python群發郵件含附件excel內容讀取收件人列表讀取

11月13日更新:把所有部分函式化 環境:Python 3.6 from openpyxl import load_workbook #excel import datetime from smtplib import SMTP #郵件 from time im

Base64 JAVA後臺編碼與JS前臺解碼(解決中文亂碼問題)

中文通過Java後臺進行Base64編碼後傳到前臺,通過JS進行Base64解碼時會出現中文亂碼的問題,被這個問題也是困擾了幾天,使用jquery.base64.js只能轉碼非中文字元,經過蒐集各種方案,最終找到適合自己的解決方案。 Java後臺編碼,這裡用的是org.ap