1. 程式人生 > >springboot整合影象資料庫Neo4j

springboot整合影象資料庫Neo4j

百度百科:     Neo4j是一個高效能的,NOSQL圖形資料庫,它將結構化資料儲存在網路上而不是表中。它是一個 嵌入式的、基於 磁碟的、具備完全的事務特性的Java持久化引擎,但是它將結構化資料儲存在網路(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高效能的圖引擎,該引擎具有成熟資料庫的所有特性。程式設計師工作在一個面向物件的、靈活的網路結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、企業級的資料庫的所有好處。 Neo4j因其嵌入式、高效能、輕量級等優勢,越來越受到關注. 查詢語句:   不是SQL,而是Cypher Cypher關鍵點
  • () 表示節點
  • [] 表示關係
  • {} 表示屬性
  • > 表示關係的方向

示例:

//查詢a的一個叫duchong的朋友
match (a)-[:Friend]->b
where b.name ='duchong'
return b

一、安裝Neo4j

社群版下載地址:

https://neo4j.com/artifact.php?name=neo4j-community-3.4.10-windows.zip

配置環境變數

NEO4J_HOME

Path
%NEO4J_HOME%\bin


配置完成,cmd

neo4j.bat console


啟動完成 瀏覽器訪問地址為:
localhost:7474
初始使用者名稱和密碼均為neo4j

二、springboot整合

新增依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>

properties配置

#neo4j
spring.data.neo4j.uri=http://localhost:7474
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123qwe

User節點

package com.dc.sb.web.neo4j;

import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;

/**
 * 節點實體型別-別名為User
 * @author DUCHONG
 * @since 2018-12-17 11:32
 **/
@NodeEntity(label = "User")
public class UserNode {
    //圖形id
    @GraphId
    private Long nodeId;
    //屬性
    @Property
    private String userId;
    //屬性
    @Property
    private String userName;
    //屬性
    @Property
    private int age;

    public Long getNodeId() {
        return nodeId;
    }

    public void setNodeId(Long nodeId) {
        this.nodeId = nodeId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

UserRelation節點

package com.dc.sb.web.neo4j;

import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;

/**
 * 關係節點型別
 * @author DUCHONG
 * @since 2018-12-17 11:39
 **/
@RelationshipEntity(type = "UserRelation")
public class UserRelation {

    @GraphId
    private Long id;
    //開始節點
    @StartNode
    private UserNode startNode;
    //結束節點
    @EndNode
    private EndNode endNode;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public UserNode getStartNode() {
        return startNode;
    }

    public void setStartNode(UserNode startNode) {
        this.startNode = startNode;
    }

    public EndNode getEndNode() {
        return endNode;
    }

    public void setEndNode(EndNode endNode) {
        this.endNode = endNode;
    }
}

UserRepository

package com.dc.sb.web.neo4j.dao;

import com.dc.sb.web.neo4j.UserNode;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author DUCHONG
 * @since 2018-12-17 11:42
 **/
@Component
public interface UserRepository extends GraphRepository<UserNode> {

    @Query("MATCH (n: User) RETURN n")
    List<UserNode> getUserNodeList();

    @Query("CREATE (n: User{age:{age},userName:{userName}}) RETURN n")
    List<UserNode> addUserNodeList(@Param("userName") String userName, @Param("age") int age);

}

UserReloationReposiroty

package com.dc.sb.web.neo4j.dao;

import com.dc.sb.web.neo4j.UserRelation;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 使用者關係DO
 * @author DUCHONG
 * @since 2018-12-17 13:53
 **/
@Component
public interface UserRelationRepository extends GraphRepository<UserRelation> {

    @Query("match p= (n:User)<- [r: UserRelation]-> (n1:User) wheren.userId=(firstUserId) and n1.userId =(secondUserId) return p")
    List<UserRelation> findUserRelationByEachId (@Param(" firstUserId") String firstUserId, @Param ("secondUserId") String secondUserId) ;

    @Query ("match(fu:User) ,(su:User) where fu. userId=[firstUserId]and su.userId=[ secondUserId, create p= (fu)- [r:UserRelation]-> (su) return p")

    List<UserRelation> addUserRelation (@Param(" firstUserId") String firstUserId, @Param("secondUserId") String secondUserId) ;
}

Service

package com.dc.sb.web.neo4j.service;

import com.dc.sb.web.neo4j.UserNode;
import com.dc.sb.web.neo4j.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author DUCHONG
 * @since 2018-12-17 14:02
 **/
@Service
public class Neo4jUserService {

    @Autowired
    private UserRepository userRepository;


    public void addUserNode(UserNode userNode){

        userRepository.addUserNodeList(userNode.getUserName(),userNode.getAge());
    }
}

Controller

package com.dc.sb.web.neo4j.controller;

import com.dc.sb.web.neo4j.UserNode;
import com.dc.sb.web.neo4j.service.Neo4jUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author DUCHONG
 * @since 2018-12-17 14:14
 **/
@RestController
public class Neo4jController {

    @Autowired
    private Neo4jUserService userService;

    @RequestMapping("/addUserNode")
    public String addUserNode(){

        UserNode userNode=new UserNode();
        userNode.setUserName("duchong");
        userNode.setAge(20);

        userService.addUserNode(userNode);

        return "add success ";
    }
}

瀏覽器訪問localhost:8080/addUserNode

檢視Neo4j 資料庫

 

完整程式碼已託管到GitHub ---》歡迎fork