springboot?neo4j的配置代碼
neo4j是一個(gè)圖形數(shù)據(jù)庫(kù),有一個(gè)做關(guān)系圖譜的需求里面需要使用到圖形數(shù)據(jù)庫(kù)。
w3c教程:https://www.w3cschool.cn/neo4j/
中文版的數(shù)據(jù)庫(kù)可以通過(guò)image屬性顯示圖片,官網(wǎng)的動(dòng)畫效果是通過(guò)3D.js實(shí)現(xiàn)的;
pom導(dǎo)入配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-http-driver</artifactId>
<version>3.1.4</version>
</dependency>
配置數(shù)據(jù)庫(kù):
#neo4j
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123
spring.data.neo4j.uri=http://192.168.100.106:7474
package com.koala.console.configuration;
import org.neo4j.ogm.session.SessionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableNeo4jRepositories(basePackages = "com.koala.console.repository.neo4j")
@EnableTransactionManagement
public class Neo4jConfig {
@Value("${blotUri}")
private String uri;
@Value("${spring.data.neo4j.uri}")
private String databaseUrl;
@Value("${spring.data.neo4j.username}")
private String userName;
@Value("${spring.data.neo4j.password}")
private String password;
@Bean
public SessionFactory sessionFactory() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
.uri(databaseUrl)
.credentials(userName, password)
.build();
return new SessionFactory(configuration, "com.koala.console.model.neo4j");
}
@Bean
public Neo4jTransactionManager transactionManager() {
return new Neo4jTransactionManager(sessionFactory());
}
}
使用neo4j:
neo4j基本由兩部分組成,節(jié)點(diǎn)和關(guān)系,關(guān)系用來(lái)指示兩個(gè)節(jié)點(diǎn)的方向和關(guān)聯(lián)屬性:
節(jié)點(diǎn)bean:
package com.koala.console.model.neo4j;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Lists;
import lombok.Data;
import org.neo4j.ogm.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Data
@NodeEntity
public class FaceNode {
public FaceNode() {
}
public FaceNode(String name) {
this.objId = name;
}
@Id
@GeneratedValue
private Long id;
/**
* objId
*/
private String objId;
@JSONField(serialize = false)
@JsonIgnore
@Transient
private String startName;
@JSONField(serialize = false)
@JsonIgnore
@Transient
private String endName;
@Transient
private Integer pathNum;
@Transient
private String intimacy;
@Property(name = "scenes")
private String scenes;
@Property(name = "image")
private String symbol;
@Transient
private Integer[] symbolSize = {60,60};
@JSONField(serialize = false)
@Transient
private MultipartFile faceImg;
@JSONField(serialize = false)
@Transient
private String startTime;
@JSONField(serialize = false)
@Transient
private String endTime;
@Relationship(type = "relation")
private List<FaceNodePro> faceNodePros = Lists.newArrayList();
private List<FaceNode> children = Lists.newArrayList();
public void addEndNode(FaceNode endNode, String title) {
FaceNodePro pro = new FaceNodePro(title, this, endNode);
this.faceNodePros.add(pro);
}
public void addStartNode(FaceNode startNode, String title) {
FaceNodePro pro = new FaceNodePro(title, startNode, this);
this.faceNodePros.add(pro);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getObjId() {
return objId;
}
public void setObjId(String objId) {
this.objId = objId;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public List<FaceNodePro> getFaceNodePros() {
return faceNodePros;
}
public void setFaceNodePros(List<FaceNodePro> faceNodePros) {
this.faceNodePros = faceNodePros;
}
public String getStartName() {
return startName;
}
public void setStartName(String startName) {
this.startName = startName;
}
public String getEndName() {
return endName;
}
public void setEndName(String endName) {
this.endName = endName;
}
public MultipartFile getFaceImg() {
return faceImg;
}
public void setFaceImg(MultipartFile faceImg) {
this.faceImg = faceImg;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getScenes() {
return scenes;
}
public void setScenes(String scenes) {
this.scenes = scenes;
}
}
關(guān)系bean:
package com.koala.console.model.neo4j;
import com.fasterxml.jackson.annotation.JsonBackReference;
import org.neo4j.ogm.annotation.*;
@RelationshipEntity(type = "relation")
public class FaceNodePro {
public FaceNodePro() {
}
public FaceNodePro(String intimacy, FaceNode startNode, FaceNode endNode) {
this.intimacy = intimacy;
this.startNode = startNode;
this.endNode = endNode;
}
@Id
@GeneratedValue
private Long nodeProId;
/**
* 親密度
*/
@Property
private String intimacy;
@JsonBackReference
@StartNode
private FaceNode startNode;
@EndNode
private FaceNode endNode;
public Long getNodeProId() {
return nodeProId;
}
public void setNodeProId(Long nodeProId) {
this.nodeProId = nodeProId;
}
public String getIntimacy() {
return intimacy;
}
public void setIntimacy(String intimacy) {
this.intimacy = intimacy;
}
public FaceNode getStartNode() {
return startNode;
}
public void setStartNode(FaceNode startNode) {
this.startNode = startNode;
}
public FaceNode getEndNode() {
return endNode;
}
public void setEndNode(FaceNode endNode) {
this.endNode = endNode;
}
}
Repository實(shí)現(xiàn):
@Repository
public interface FaceNodeRepository extends Neo4jRepository<FaceNode, Long> {
FaceNode findByObjId(@Param("objId") String objId);
/**
* 查詢節(jié)點(diǎn)Node指定層級(jí)的圖
*
* @param
* @return
*/
@Query(value = "MATCH n=(:FaceNode{objId:{objId}})-[*..6]->() RETURN n")
List<FaceNode> findByHierarchical(@Param("objId") String objId);
}
剩下的使用都是很簡(jiǎn)單的事情。
我收集了一些會(huì)使用到的語(yǔ)句:
查詢節(jié)點(diǎn)Node所有的關(guān)系
match(Node{name:'5c26219bd3e2dca5322110bb'})-[:PLAYED_IN]->(yf)return Node,yf
查詢節(jié)點(diǎn)Node的2層關(guān)系圖
MATCH n=(:Node{name:"5c262177d3e2dca5322110b3"})-[*..1]-() return n
兩個(gè)陌生人之間的所有最短認(rèn)識(shí)路徑
MATCH n = allshortestPaths((小訊:朋友圈{姓名:"小訊"})-[*..6]-(小菲:朋友圈{姓名:"小菲"})) return n
查詢節(jié)點(diǎn)Node指向的所有節(jié)點(diǎn)
MATCH (:Node { name: '5c262137d3e2dca5322110a7' })-->(movie)RETURN movie;
查詢標(biāo)簽Node所有節(jié)點(diǎn)
match(n)--(m:Node)return n;
批量創(chuàng)建Node節(jié)點(diǎn)的朋友圈
MATCH (Node:Node {name:"4j2ap"})FOREACH (name in ["Johan","Rajesh","Anna","Julia","Andrew"] |CREATE (Node)-[:FRIEND]->(:Person {name:name}))
查詢兩個(gè)節(jié)點(diǎn)有向關(guān)系條數(shù)
match (:FaceNode{name:"gong"})-[r:PLAYED_IN]->(:FaceNode{name:"eza2e"})return count(r)
參考:
轉(zhuǎn)載自:https://www.cxymm.net/article/sinat_21184471/87092034
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/sinat_21184471/article/details/87092034
到此這篇關(guān)于springboot?neo4j的文章就介紹到這了,更多相關(guān)springboot?neo4j內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用webservice自定義注解處理參數(shù)加解密問(wèn)題
這篇文章主要介紹了使用webservice自定義注解處理參數(shù)加解密問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java連接 JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
這篇文章主要介紹了Java連接 JDBC基礎(chǔ)知識(shí),包括操作數(shù)據(jù)庫(kù)之增刪改查操作,需要的朋友可以參考下2021-04-04
詳解Java中的時(shí)區(qū)類TimeZone的用法
TimeZone可以用來(lái)獲取或者規(guī)定時(shí)區(qū),也可以用來(lái)計(jì)算時(shí)差,這里我們就來(lái)詳解Java中的時(shí)區(qū)類TimeZone的用法,特別要注意下面所提到的TimeZone相關(guān)的時(shí)間校準(zhǔn)問(wèn)題.2016-06-06
如何解決UnsupportedOperationException異常問(wèn)題
這篇文章主要介紹了如何解決UnsupportedOperationException異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
解決cmd執(zhí)行javac報(bào)錯(cuò):不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
剛接觸JAVA的新手可能就不知道怎么解決'JAVAC'不是內(nèi)部命令或外部命令,這篇文章主要給大家介紹了關(guān)于解決cmd執(zhí)行javac報(bào)錯(cuò):不是內(nèi)部或外部命令,也不是可運(yùn)行的程序的相關(guān)資料,需要的朋友可以參考下2023-11-11
java項(xiàng)目jar包與jdk的版本不兼容的問(wèn)題解決
這篇文章主要介紹了java項(xiàng)目jar包與jdk的版本不兼容的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Java實(shí)現(xiàn)經(jīng)典游戲黃金礦工的示例代碼
《黃金礦工》游戲是一個(gè)經(jīng)典的抓金子小游戲,它可以鍛煉人的反應(yīng)能力。本文將用Java實(shí)現(xiàn)這一經(jīng)典的游戲,感興趣的小伙伴可以了解一下2022-02-02

