springboot整合影象資料庫Neo4j
阿新 • • 發佈:2018-12-17
百度百科:
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