我在本地测试,下载了neo4j-desktop图数据库可视化工具,下载地址:https://neo4j.com/download/https://neo4j.com/download/
使用springboot集成neo4j,导入spring-boot-starter-data-neo4j依赖或者spring-data-neo4j
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
<version>3.2.2</version>
</dependency>
<!--要使用neo4j的注解还需要导入这个依赖-->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-core</artifactId>
<version>3.2.16</version>
</dependency>
这俩的neo4j版本都是5.15.0,所以jdk需要17,上一篇文章中提到过,jdk8版本需要4以下的版本,但是neo4j-desktop没有4以下的版本,配置文件
spring:
neo4j:
uri: bolt://localhost:7687
authentication:
username: neo4j
password: 12345678
encryption:
enabled: false
结合上一篇中提到的,这一章将记录在springboot中使用CQL的节点,属性,关系等
@NodeEntity 将 Java 类声明为一个节点实体,表示该类的对象将映射到图数据库中的节点。
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity
public class Person {
// 类的属性
}
@RelationshipProperties用于定义关系。@Property定义属性
@NodeEntity("Person")
@Data
public class Person {//节点类
@Id
private Long id;
@Property
private String name;
@Relationship(type = "FRIEND")//@relationship不能修饰实体类
private List<FriendOf> friends = new ArrayList<>();
// 省略构造函数、getter和setter
}
@RelationshipProperties
public class FriendOf {//关系实体
@Id
private Long id;
@Property
private String type; // 关系类型
@Property
private String since; // 友谊建立时间
@StartNode
private Person person1;
@EndNode
private Person person2;
// 可选:定义关系的属性
}
@RelationshipProperties
public class FriendOf {//关系实体
@Id
private Long id;
@Property
private String type; // 关系类型
@Property
private String since; // 友谊建立时间
}
@RelationshipProperties
public class FriendOf {
private String type; // 关系类型
private String since; // 友谊建立时间
@Relationship(type = "FRIEND",direction = Relationship.INCOMING)
private Person person1;
@Relationship(type = "FRIEND",direction = Relationship.OUTGOING)
private Person person2;
}
关于关系实体类中的@StartNode和@EndNode的使用,以及@RelationShip可以替换@StartNode和@EndNode,什么时候关系实体类中需要添加开始节点和结束节点的说明:
-
不加开始节点和结束节点:
当关系实体类不需要包含开始节点和结束节点时,通常适用于简单的关系,例如仅包含一个属性或几个属性的关系。在这种情况下,关系实体类仅用于表示关系本身的属性,而不需要关联到具体的节点。例如,如果我们只需要表示两个人之间的友谊关系,而不需要具体的开始节点和结束节点信息,则可以像之前提供的示例代码中一样,只定义关系实体类,而不包含开始节点和结束节点。 -
包含开始节点和结束节点:
当关系需要额外的属性或更复杂的结构时,您可能希望在关系实体类中包含开始节点和结束节点的信息。这种情况下,关系实体类不仅包含关系本身的属性,还包含关联到开始节点和结束节点的信息。这样做可以方便地通过关系实体类来获取相关节点的属性,并且在执行查询时可以更灵活地使用Cypher语句。通常,这种方式适用于需要更多关于关系的信息,或者需要在查询中同时访问节点和关系属性的情况。