neo4j是一个图形数据库,有一个做关系图谱的需求里面需要使用到图形数据库。
w3c教程:https://www.w3cschool.cn/neo4j/
中文版的数据库可以通过image属性显示图片,官网的动画效果是通过3D.js实现的;
pom导入配置
- <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>
配置数据库:
- #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基本由两部分组成,节点和关系,关系用来指示两个节点的方向和关联属性:
节点bean:
关系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实现:
- @Repository
- public interface FaceNodeRepository extends Neo4jRepository<FaceNode, Long> {
-
- FaceNode findByObjId(@Param("objId") String objId);
-
- /**
- * 查询节点Node指定层级的图
- *
- * @param
- * @return
- */
- @Query(value = "MATCH n=(:FaceNode{objId:{objId}})-[*..6]->() RETURN n")
- List<FaceNode> findByHierarchical(@Param("objId") String objId);
-
- }
剩下的使用都是很简单的事情。
我收集了一些会使用到的语句:
- 查询节点Node所有的关系
- match(Node{name:'5c26219bd3e2dca5322110bb'})-[:PLAYED_IN]->(yf)return Node,yf
- 查询节点Node的2层关系图
- MATCH n=(:Node{name:"5c262177d3e2dca5322110b3"})-[*..1]-() return n
- 两个陌生人之间的所有最短认识路径
- MATCH n = allshortestPaths((小讯:朋友圈{姓名:"小讯"})-[*..6]-(小菲:朋友圈{姓名:"小菲"})) return n
- 查询节点Node指向的所有节点
- MATCH (:Node { name: '5c262137d3e2dca5322110a7' })-->(movie)RETURN movie;
- 查询标签Node所有节点
- match(n)--(m:Node)return n;
- 批量创建Node节点的朋友圈
- MATCH (Node:Node {name:"4j2ap"})FOREACH (name in ["Johan","Rajesh","Anna","Julia","Andrew"] |CREATE (Node)-[:FRIEND]->(:Person {name:name}))
- 查询两个节点有向关系条数
- match (:FaceNode{name:"gong"})-[r:PLAYED_IN]->(:FaceNode{name:"eza2e"})return count(r)
参考:
转载自:https://www.cxymm.net/article/sinat_21184471/87092034
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_21184471/article/details/87092034
到此这篇关于springboot?neo4j的文章就介绍到这了,更多相关springboot?neo4j内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!