1. 程式人生 > >NEO4J資料處理及顯示功能

NEO4J資料處理及顯示功能

這篇博文也算是對最近工作的一個總結吧!

首先NEO4J是一個圖形資料庫,眾所周知的圖形,是所有表達語言中表達力最強的一個,聲音,文字,肢體語言等都遠遠不如,所以這也是我認為為什麼圖形資料庫的應用比較廣泛,但是更加重要的應該就是他的強大的功能了吧。

大致介紹一下,圖形資料庫,資料庫嘛:存放資料,表達關係的。最簡單的圖形資料庫表示就是:兩個節點,一條指向性關係的格式(附帶的還有些小的屬性,標記等)

首先我的做的工作就是:接收大資料介面中傳遞過來的資料,資料處理,頁面展示。

大資料介面的服務呼叫:我的只需要在provide.xml配置檔案中,配置相應的service服務即可,然後在Controller層進行相應的呼叫操作即可。

我先大致的展示一下我想要做的效果圖及業務執行流程:

大致的執行流程是:訪問頁面,左邊動態選單,已載入完成,點選neo4j效果圖展示,出現上面選擇模型引數以及模型效果展示區域(但是並沒有效果),當點選選單按鈕的時候,下拉列表也已載入完成,然後選擇下拉列表中的選項,下面的引數列表input組才會顯示出來,並且顯示的資料都是從後臺資料庫中獲取的。

下面是我這次專案的開發流程:

①:首先左側選單不用我去寫,只需要在資料庫中配置好即可(因為已經有程式去查詢資料庫中的選單選項,分別判斷是否為父/子選單,然後將資料返回給前臺做展示)

②:第一版的時候,我先在下拉框中寫死兩個模型,然後點選切換下拉選單,會顯示不同數量的輸入框效果,並且輸入框中有值,這些都是通過ajax結果集拼接樣式做出來的,當然引數也都是寫死的,只不過不同的下拉選項,產生不同的值,這個就寫個if判斷就ok

③:做完這個之後,我就試著去連線neo4j的資料服務了,得到了想要的json串或者是其他格式的資料

④:在做neo4j的資料展示的時候,我甚是為難,因為沒有玩過前臺這種圖資料顯示,後來寫完之後,發現基本的前臺樣式無非就是表單中的各種格式,還有什麼表格什麼的,如果其他的前臺樣式展示,那就是css,js,jquery的封裝外掛啦,然後就在網上找到了cytoscape.js外掛

⑤:原本以為做的只是一個簡單的小demo,後來要求需要部署的,後面就是一系列的調整工作了

⑥:第一個修改的就是nep4j的顯示方式,通過網上的不太齊全的樣板,終於做出來了自己的作品了,我們組長說,用自己的東西,具體的演算法都是封裝好的,直接呼叫就好了。

⑦:剩下的動態化調整,也就是ajax請求引數,非同步載入下拉選單中的資料

⑧:當選擇不同的下拉選項的時候,動態的顯示,不同數量,不同引數的引數組

⑨:將查詢到的模型耗時動態化的展示出來

⑩:動態化的展示圖資料基本工作已經完成,由於原來專案較為複雜,所以需要將模型資料展示抽取出來,獨立形成一個專案

①①:通過idea建立maven工程,配置pom.xml,web.xml,spring.xml,mybatis.xml,springMVC.xml等配置檔案,匯入檔案

①②:使用bootstrap對頁面進行佈局

下面將具體闡述具體功能實現遇到的一些問題:

②:按照上面的專案流程實現沒有問題,主要的就在於對於具體功能實現過程中遇到的一些特點的問題。

  1. <select id="selects" onchange="onChange(this)" style="width:100%">
  2. <option value="0"checked>請選擇</option>
  3. <option value="1">選項一</option>
  4. <option value="2">選項二</option>
  5. </select>
問題一:我寫了一個function函式方法用來實現ajax請求,並使用結果集來拼接顯示樣式,這時候遇到了一個下拉框很普遍的類快取問題 解決方案:
  1. $("select > option:gt(0)").remove();
問題二:頁面中顯示或者隱藏某些元件 解決方案:
  1. 使用具體的選擇器(jquery)
  2. $("#select").hide();
  3. $("#select").show();
問題三:如何根據ajax結果集拼接樣式展示資料 Html程式碼  收藏程式碼
  1. 使用具體的選擇器(jquery) 
  2. $("select").append("<option value="ret[i].mid+">"+ret[i].modelName+"</option>") 
  3. $("select").after("<option value="ret[i].mid+">"+ret[i].modelName+"</option>")
③:程式猿的單元測試模型junit
  1. @RunWith(SpringJUnit4ClassRunner.class) 
  2. @ContextConfiguration("classpath:spring-context.xml") 
  3. public class JunitTest{ 
  4. @Autowird 
  5. private DemoMapper demoMapper; 
  6. @Test 
  7. public void methodTest(){ 
  8. System.out.println("This is the junit test example"); 
  9. //需要注意的是:junit測試類的名字不能是Test,環境是spring
這裡就不說遇到什麼問題了,直接把書寫的時候的注意點說出來
Html程式碼  收藏程式碼
  1. 首先引入的檔案 
  2. <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-2.0.3.min.js"></script> 
  3. <script src="${pageContext.request.contextPath}/js/graph/cytoscape.js"></script> 
  4. 下面是定式樣版(寫死了的模板) 
  5. <script>         
  6. $(function(){             
  7. cytoscape({ 
  8. //選擇div               
  9. container: document.getElementById('cy'), 
  10. //給兩個節點和一條關係增加樣式  
  11. style: [       
  12. { selector: 'node[label = "Person"]',        
  13. css: {'background-color': '#6FB1FC', 'content': 'data(name)'}},
  14. { selector: 'node[label = "Movie"]',          
  15. css: {'background-color': '#F5A45D', 'content': 'data(title)'}},       
  16. { selector: 'edge',          
  17. css: {'content': 'data(relationship)', 'target-arrow-shape': 'triangle'}        }           
  18. ], 
  19. //顯示節點和關係的資料來源  
  20. elements: {       
  21. nodes: [         
  22. {data: {id: '172', name: 'Tom Cruise', label: 'Person'}},          
  23. {data: {id: '183', title: 'Top Gun', label: 'Movie'}}        
  24. ],          
  25. edges: [
  26. {data: {source: '172', target: '183', relationship: 'Acted_In'}}]   
  27. }, 
  28. //圖資料顯示的佈局排版               
  29. layout: { name: 'grid'}              
  30. });         
  31. }); 
  32. </script> 
  33. <body> 
  34. <div id="cy">
  35. </div> 
  36. </body> 
  37. //需要注意的是:動態獲取資料來源的時候,需要對返回的json格式進行調整,總的來說返回來的是一個整體的物件就可以 
  38. 不能是這樣: nodes:[ {data:{id:'172'},name:'Tom Cruise',label:'Person'} ] 
  39. 必須這樣: nodes:[ {data:{id:'172',name:'Tom Cruise',label:'Person'}} ] 
  40. 具體的cytoscape.js的動態使用方法,我會在我博文中的neo4j的文章分類中詳細介紹


⑧:手動提交表單,並根據結果集動態的新增不同數量不同引數的輸入框組
  1. function subOnclick(){
  2. /*組裝params物件引數*/
  3. var params =$("#fromData").serializeArray();
  4. $.param(params);
  5. $.ajax({
  6. url:"${pageContext.request.contextPath}/*/*",
  7. type:"get",
  8. data:params,
  9. dataType:"json",
  10. success:function(ret,status){
  11. $("table td").remove();
  12. for(var i=0;i<ret.length;i++){
  13. $("#tbody").after("<tr>");
  14. $("#tbody").after("<td>"+ret[i].text+"</td>");
  15. $("#tbody").after("<td>"+ret[i].from+"</td>");
  16. $("#tbody").after("<td>"+ret[i].to+"</td>");
  17. $("#tbody").after("<tr>")
  18. }
  19. })
⑨:問題四:如何提交form表單
  1. var params =$("#fromData").serializeArray();
copy/*組裝params物件引數*/ 遍歷尋找from表單中的value//遍歷查詢form表單引數
  1. var data = {mid:$("#selects").val()};
  2. $("#formData").find("input[type='text'].each(function(){
  3. var paraValue = $(this).val().trim();
  4. var paraName = $(this).attr("name");
  5. var paraText = $(this).attr("placeholder");
  6. data[paraName] = paraValue;
  7. })")

⑩:如何清空下拉選單切換顯示資料造成的類冗餘cop
  1. 在哪一個選擇器後面append/after,就選擇誰清空
  2. $("#tbody").empty();
問題五:jsp向controller傳送一個物件,controller使用什麼引數接受,不適用實體類物件的情況下(request,我竟然把作用域給忘記了)copy
  1. @ResponseBody
  2. @RequestMapping("/testGraph")
  3. public Map<String,List<Map>> testGraph (HttpServletRequest request){
  4. Enumeration enu = request.getParameterNames();
  5. HashMap map = new HashMap();
  6. while(enu.hasMoreElements()){
  7. String paraName = (String)enu.nextElement();
  8. map.put(paraName,request.getParameter(paraName));
  9. }
  10. Map<String,List<Map>> listMap = null;
  11. try{
  12. listMao = Neo4jService.RunModel(map);
  13. }catch(Exception e){
  14. e.printStackTrace();
  15. }
  16. return listMap;
  1. }
問題六:如何解析後臺傳來的String資料
  1. 後臺傳遞過來的值:
  2. modelInfo:{
  3. modelName:"",
  4. modelParam:[{paraName:"QD",paraText:"起點",paraValue:""},{paraName:"ID",paraText:"ID",paraValue:""}],
  5. parentName:""
  6. }
  7. 具體的解析操作:
  8. @ResponseBody
  9. @RequestMapping("/queryModelParams")
  10. public JSONArray queryModelParams(Integer mid){
  11. List<ModelParams> lists = demoService.queryMenuParams(mid);
  12. //現將結果轉為jsonArray的形式
  13. JSONArray jsonArray = JSONArray.fromObjrct(lists);
  14. JSONArray params = null;
  15. for(int i=0;i<jsonArray.size();i++){
  16. //獲得jsonObject物件
  17. JSONObject jsonObject = (JSONObject)jsonArray.get(i);
  18. //獲得modelpara陣列
  19. Object o = jsonObject.get("modelpara");
  20. //獲得modelpara
  21. params = JSONArray.fromObject(o);
  22. }
  23. return params;
  24. }
①②:問題七:使用bootstrap進行簡單佈局 主要使用的就是一個封裝好的div <div class="row"> <div class="col-xs-2"> <div class="col-xs-10"> </div> 首先class=“row”是一個整體的類比於body 然後bootstrap是12網柵格,所以上面的和不能大於12 ①③問題八:對select/option下拉框進行樣式調整,我當時直接查詢bootstrap按照上面的寫,就不會寫改變事件了,後來在網上看到一個方法,頓時驚醒夢中人,在此做下記錄
  1. 在select中新增class="form-control"  
  2. 如果學過easyui或者其他框架的話,都會知道,這些框架的總結就是大致是根據class=“*”來呼叫框架封裝的div樣式即可,
  3. 看到這個我才想起來。在這裡分享給大家吧問題
①④:問題九:上面bootstra類的區分?
  1. .col-xs- 超小螢幕 手機 (<768px)  
  2. .col-sm- 小螢幕 平板 (≥768px)  
  3. .col-md- 中等螢幕 桌面顯示器 (≥992px)  
  4. .col-lg- 大螢幕 大桌面顯示器 (≥1200px)
①⑤:問題十:選中下拉框中的下拉選項/選中div後面的input-group,並賦值
  1. 選中下拉框中的下拉選項
  2. $("select>option:gt(0)").hide();
  3. <select>中<option>選項中第一個元素以後的option進行顯示/異常。。。其他操作
  4. 選中div中的input-group
  5. $("#formData>.input-group:gt(2)").show();
  6. 在formData這個div中的input-group組中的第三個input框以後的顯示
  7. 對輸入框進行賦值
  8. $("input[name='id']").valueOf().attr("value")//獲取值
  9. $("input[name='id']").valueOf().attr("value",3);//賦值

相關推薦

NEO4J資料處理顯示功能

這篇博文也算是對最近工作的一個總結吧! 首先NEO4J是一個圖形資料庫,眾所周知的圖形,是所有表達語言中表達力最強的一個,聲音,文字,肢體語言等都遠遠不如,所以這也是我認為為什麼圖形資料庫的應用比較廣

OS資料處理版本特性-json解析

首先需要一個json {     "menu":     {         "id":"file",         "value":"File",   &nb

IOS資料處理版本特性-CoreData的增刪改查

// //  ViewController.swift //  Dome2test // //  Created by 郭文亮 on 2018/11/21. //  Copyright © 2018年 finalliang. All rights rese

IOS資料處理版本特性-NSKeyedArchiver儲存和解析

建立一個繼承自物件的類可被序列化和反序列化,這樣的話就可以歸檔到磁碟中火網路中 import Foundation class UserModel: NSObject , NSCoding {     var name:NSString!     va

IOS資料處理版本特性-plist屬性列表檔案

讀取本地plist檔案 //讀取和解析Plist屬性列表檔案         let plistPath = Bundle.main.path(forResource: "DomePlist", ofType: "plist")   &nbs

IOS資料處理版本特性-退出系統前的事件處理以及首次開啟app的處理

// //  ViewController.swift //  DemoApp // //  Created by 郭文亮 on 2018/11/19. //  Copyright © 2018年 finalliang. All rights reserv

IOS資料處理版本特性-對檔案,資料夾的操作

// //  ViewController.swift //  DemoApp // //  Created by 郭文亮 on 2018/11/19. //  Copyright © 2018年 finalliang. All rights reserv

IOS資料處理版本特性-沙箱結構中常見的幾個目錄

//如何獲取程式沙箱結構中常見的幾個目錄         //獲取應用程式的路徑 包含三個資料夾 文件目錄 庫目錄 臨時目錄 還有一個程式包。         //(這個目錄就是沙河 策劃個女婿職能訪問該目錄下的

IOS資料處理版本特性-解析XML檔案

準備一個需要解析的xml檔案 <?xml version="1.0" encoding="UTF-8" ?> <workers>     <worker id='1'>         <n

IOS資料處理版本特性-單例

import Foundation class SingletonClass {     var action = "Run"     //對於單例類來說 需要建立一個唯一對外輸出例項的方法     //靜態變數使用static來處理

Jackson資料處理繫結

獲取 Maven的 該軟體包的功能包含在Java包中com.fasterxml.jackson.databind,可以使用以下Maven依賴項來使用: < properties > ... <! -儘可能使用最新版本。- > < jackson .versio

電影資料處理分析

對10萬條愛奇藝電影資料的處理分析,其中用到了Jupyter Notebook,Numpy,Pandas,Matplotlib 首先第一步是對資料進行預處理: 1、資料清洗 - 去除空值 如果是字串就改成缺失資料,數值的話就改成0 if df[col].dtyp

JData資料處理高潛使用者購買意向預測

競賽概述: 本次大賽以京東商城真實的使用者、商品和行為資料(脫敏後)為基礎,參賽隊伍需要通過資料探勘的技術和機器學習的演算法,構建使用者購買商品的預測模型,輸出高潛使用者和目標商品的匹配結果,為精準營銷提供高質量的目標群體。同時,希望參賽隊伍能通過本次比賽,挖掘資料背後潛在

Ubuntu USB串列埠資料 讀取顯示

顯示串列埠接受的資料命令      1.1 在終端輸入   lsusb  顯示所有連線的usb裝置      1.2 在終端輸入   ls /dev/ttyA* 顯示所有連線的虛擬USB裝置埠號

信用評分卡(A卡) 基於LR模型的資料處理建模過程

資料來自:魔鏡杯風控演算法大賽(拍拍貸)。有關資料的具體描述可以看比賽頁面。 0. 資料集的關鍵欄位及描述: Master:每一行代表一個樣本(一筆成功成交借款),每個樣本包含200多個各類欄位。 idx:每一筆貸款的unique key,可以與另外2個檔案裡的idx相匹

JSON資料處理與echarts結合使用時所需要的問題

data部分傳入的資料要求是陣列 如果是json資料 需要做出解析後變成資料才可以使用 1. var str = “[‘研發部’,’研發部’,’研發部’,’研發部’]”; var strDat

hive資料處理hdfs檔案操作

寫在前面: 本想使用hive呼叫python指令碼實現統計分析movielens資料,但是最後一步呼叫指令碼的地方不成功沒找到問題所在,於是將過程中的一些經驗寫出來,非常詳盡,對新手來說應該挺有用的。 另外呼叫指令碼的程式和報錯我會貼出來,應該

Pandas日期資料處理:如何按日期篩選、顯示統計資料

前言 pandas有著強大的日期資料處理功能,本期我們來了解下pandas處理日期資料的一些基本功能,主要包括以下三個方面: 按日期篩選資料 按日期顯示資料 按日期統計資料 執行環境為 windows系統,64位,python3.5。 1 讀取並整理資料 首先

Pandas使用DataFrame進行資料分析比賽進階之路(二):日期資料處理:按日期篩選、顯示統計資料

首先,表格的資料格式如下: 1、獲取某年某月資料 data_train = pd.read_csv('data/train.csv') # 將資料型別轉換為日期型別 data_train[

Redis和nosql簡介,api呼叫;Redis資料功能(String型別的資料處理);List資料結構(Java呼叫處理);Hash資料結構;Set資料結構功能;sortedSet(有序集合)數

1、Redis和nosql簡介,api呼叫14.1/ nosql介紹NoSQL:一類新出現的資料庫(not only sql),它的特點:1、  不支援SQL語法2、  儲存結構跟傳統關係型資料庫中的那種關係表完全不同,nosql中儲存的資料都是KV形式3、  NoSQL的世界中沒有一種通用的語言,每種no