Neo4j(CQL)学习记录-02(Cypher Query Language)

我在本地测试,下载了neo4j-desktop图数据库可视化工具,下载地址:https://neo4j.com/download/icon-default.png?t=N7T8https://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,什么时候关系实体类中需要添加开始节点和结束节点的说明:

  1. 不加开始节点和结束节点:
    当关系实体类不需要包含开始节点和结束节点时,通常适用于简单的关系,例如仅包含一个属性或几个属性的关系。在这种情况下,关系实体类仅用于表示关系本身的属性,而不需要关联到具体的节点。例如,如果我们只需要表示两个人之间的友谊关系,而不需要具体的开始节点和结束节点信息,则可以像之前提供的示例代码中一样,只定义关系实体类,而不包含开始节点和结束节点。

  2. 包含开始节点和结束节点:
    当关系需要额外的属性或更复杂的结构时,您可能希望在关系实体类中包含开始节点和结束节点的信息。这种情况下,关系实体类不仅包含关系本身的属性,还包含关联到开始节点和结束节点的信息。这样做可以方便地通过关系实体类来获取相关节点的属性,并且在执行查询时可以更灵活地使用Cypher语句。通常,这种方式适用于需要更多关于关系的信息,或者需要在查询中同时访问节点和关系属性的情况。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值