Springboot 集成Neo4j完整版

前言

     小編最近的工作中遇到了一些知識圖譜的工作,自然就用到了圖數據庫,這一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

總結

     本次大概寫了下我認爲的比較簡單的配置方式,在此之前小編還嘗試了配置類的方式,比較繁瑣這次就不做介紹了,感謝您的閱讀~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章