spring data neo4j 使用和總結

2021-09-24 17:21:36 字數 2637 閱讀 5595

首先列出幾個問題:

1.neo4j如何返回多個型別的關係和節點。

2.spring-data-neo4j  如何在dao層中自定義傳參,或者自己拼接好cql當做引數傳入dao層

3.第乙個問題:開發的時候我有兩種節點   person和book,但是關係卻有大概10幾種。我看了neo4j的官方例項以及github上的絕大部分例項,但是無一例外那些例子都是返回的乙個關係,要麼就是通過查詢多次返回關係。讓我不禁對自己產生了懷疑,難道真的不能一次返回所有的關係?  答案是當然可以,但是我們要為每個節點個關係建乙個實體類,這是必不可少的。 我的pojo包裡面有大概20個實體類。。。。。。。。

第二個問題:由於spring-data-neo4j是在dao層註解上寫查詢語句的,那麼就會遇到一些傳參的問題,當然,我們可以用@param("id") int id 這種方式來傳參,但是如果要傳入節點型別customer的時候這種方式竟然不行(當然,我是沒傳進去,不知道其他人怎麼傳的)。於是我研究了neo4j的api發現可以在service層拼接好cql,然後把整個cql當做引數傳入dao層去執行。

以上兩個問題的答案就在下面的**裡了,讓我們一起去探索吧!!

這是dao層。我們可以看到下圖中第二個查詢語句是解決第二個問題的,傳入整個cql,但是我們用到call  apoc.cypher.run,應該有人不理解這是神馬,這是乙個neo4j的apoc中的一些語法,我們只需要在neo4j整合一下就行了,具體請看該部落格,

,當然我們傳進來的cql就是我們熟悉的cypher語言了,比如

cql = 「match (n) return n」

@component

public inte***ce customerrepository extends neo4jrepository,'+person|+book',0,) yield path as paths return paths")

listgetusernodelist(@param("num") int num,//關係層數

@param("id") int id,//id

@param("str") string str);//關係型別 編寫|著作

//傳入整個拼接好的cql進來當做引數

@query("call apoc.cypher.run(, null) yield value return value as value")

listgetnoderelation(@param("cql") string cql);

}

然後再來看第乙個查詢語句,如何返回多個節點和多個關係, 很顯然我的查詢語句返回的既有節點又有關係,而我用list這個集合來接,那麼basenode一定是乙個神通廣大的實體類了。其實不然,他很簡單,很單純,很清澈。

首先看一下我的實體類,標紅的是我用到的。basenode是父類,person和book繼承basenode。relation和relationtwo繼承relat類,

我們可以看到實體類中id,name,***是我節點的屬性,那麼下面兩個list存的就是關係的集合了。而list的泛型是relat這個實體類,所以關係就會以relat類的形式存入。

public class basenode
public class relat
接下來就是controller層了,service就不寫了,一些處理直接放到controller了。(懶)

//獲取資料並拼接成echarts所需要的格式

mapmap = new hashmap<>();

listnodes = new arraylist<>();

listlinks = new arraylist<>();

listusernodelist = customerrepository.getusernodelist(1,67,"編寫|著作");

iteratoriterator = usernodelist.iterator();

while(iterator.hasnext())

}listrelatwo = node.getrelatwo();

if(relatwo != null)

}} map.put("nodes", nodes);

map.put("links", links);

string cql = "match (n) return n";

listnoderelation = customerrepository.getnoderelation(cql);

log4j日誌系統 Log4j

1.1 log4j的三大核心元件 1.2 loggers 記錄器 1.4 layouts 布局 org.apache.log4j.htmllayout 以html 形式布局 org.apache.log4j.patternlayout 可以靈活地指定布局模式 org.apache.log4j.lay...

slf4j結合log4j使用

在pom檔案中引入需要的jar包 org.slf4jgroupid slf4j apiartifactid 1.7.25version dependency org.slf4jgroupid jcl over slf4jartifactid 1.7.25version runtimescope de...

gradle注釋 Slf4j 配置log4j日誌

在工程除錯或者執行時候需要列印日誌,方便在出現錯誤的時候對程式進行定位。1 gradle可以使用注釋 slf4j方式 使用log4j功能。gradle使用 slf4j注釋需要匯入lombok外掛程式和依賴jar包方式如下 2 在執行的類上新增注釋 3 新增注釋後執行 會提示 log4j沒有初始化。其...