前言
小編最近的工作中遇到了一些知識圖譜的工作,自然就用到了圖數據庫,這一NoSQL 數據庫可以很好的展示節點之間的關聯關係,對於一些圖譜的關係操作是很好的選擇哦~,下面來介紹下 Springboot 中如何集成Neo4J。
正文
Neo4j 概覽 ( 這張圖超喜歡)
NEO4J 學習
neo4j官網介紹
spring-data-neo4j官網介紹
Pom文件中引入依賴
Spring生態中Spring-data部分不僅僅提供了Spring-data-jpa , 也提供了Spring-data-neo4j 支持spring和 neo4j的完美融合,pom.xml 文件中依賴如圖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
yml文件中配置連接屬性
spring:
data:
neo4j:
uri: bolt://localhost:7687
username: neo4j
password: neo4j
建立NodeEntity
( 有點類似於Mysql中的table 映射的對象類,mysql中叫做ORM,neo4j中叫做OGM [object graph mapping])
【節點的標籤實體】
@NodeEntity
@Builder
@Data
public class SupplyGraph {
@Id
@GeneratedValue
private Long id;
/**
* 供應商名稱
*/
private String name;
}
【關係實體】
# 供應關係(公司節點和供應商節點節點是供應關係)
@Data
@Builder
@RelationshipEntity(type = "supply")
public class SupplyRelationship {
@Id
@GeneratedValue
private Long id;
private String indexName;
//關係的一端節點是 公司節點
@StartNode
private CompanyGraph company;
//關係的另一端節點是 供應商節點
@EndNode
private SupplyGraph supply;
//下面是關係的屬性
/**
* 採購佔比
*/
private String scale;
/**
* 採購金額
*/
private String amount;
}
編寫Repository
// 節點Repository
public interface SupplyGraphRepository extends Neo4jRepository<SupplyGraph,Long> {}
// 關係Repository
public interface SupplyRelationshipRepository extends Neo4jRepository<SupplyRelationship, Long> { }
編寫Service
實現功能: 添加公司節點到圖數據庫中,添加供應商節點到圖數據庫中,添加供應關係到圖數據庫中;
public void testSave(){
……
//採購佔比
String scale = "47.14%";
// 採購金額
String amount =“18923.42” ;
//供應商名稱
String name = "常州常電及其關聯公司";
//公司實體部分及添加公司節點部分省略...(companyGraph)
SupplyGraph supplyGraph = SupplyGraph.builder().name(name).build();
//添加供應商節點
supplyGraphRepository.save(supplyGraph);
String indexName = companyGraph.getFullName() + "-" + supplyGraph.getName();
//供應商關係
SupplyRelationship supplyRelationship =
SupplyRelationship.builder().company(companyGraph).supply(supplyGraph).amount(amount).scale(scale).indexName(indexName).build();
//添加供應關係
supplyRelationshipRepository.save(supplyRelationship);
……
}
運行程序,查看結果
可以看到紅框中有新增的兩個實體和關係,執行成功!
疑問 & 討論
小編在生產環境用到了Neo4j 集羣,在配置集羣地址時大家都是怎麼配置的呢? 歡迎大家下方留言共同探討~
生效的方式(感覺neo4j cluster address 配置的怪怪的):
spring:
data:
neo4j:
# leader:ip1 follower:ip2 ,ip3
uri: bolt://ip1:7687
uris: bolt://ip2:7687,bolt://ip3:7687
username: neo4j
password:pro
失敗的方式:
spring:
data:
neo4j:
# leader:ip1 follower:ip2 ,ip3
uris: bolt://ip1:7687,bolt://ip2:7687,bolt://ip3:7687
username: neo4j
password:pro
總結
本次大概寫了下我認爲的比較簡單的配置方式,在此之前小編還嘗試了配置類的方式,比較繁瑣這次就不做介紹了,感謝您的閱讀~~