当前位置: 首页 > news >正文

Springboot连接neo4j

一、Spring Data Neo4j 核心知识体系

1. 核心概念
  • 图数据库特性

    • 数据以 ​节点(Node)​ 和 ​关系(Relationship)​ 形式存储,支持属性(Property)。
    • 查询语言:Cypher(类似 SQL 的声明式语言)。
  • Spring Data Neo4j 定位

    • 基于 Spring Data 的抽象层,简化 Neo4j 操作(类似 JPA 对关系型数据库的封装)。
    • 提供注解驱动编程模型,将 Java 对象映射到图结构。

2. 实体映射基础
​**(1) 节点映射**
  • ​**@Node 注解**:
    • 功能:标记类为图数据库中的节点实体。
    • 参数:
      • value:指定节点标签(Label),默认使用类名(如 @Node("User"))。
    • 示例
      @Node("owl__Class")  // 节点标签为 owl__Class
      public class OwlClass { ... }
​**(2) 唯一标识符**
  • ​**@Id + @GeneratedValue**:
    • @Id:标记主键字段(对应 Neo4j 节点的内部 ID)。
    • @GeneratedValue:声明 ID 由数据库自动生成(不可手动赋值)。
    • 注意
      • 默认生成策略为 InternalIdGenerator(Neo4j 内部长整型 ID,不建议暴露给业务系统)。
      • 若需业务主键(如 UUID),需结合 @Property 定义额外字段(如 elementId)。
​**(3) 属性映射**
  • ​**@Property 注解**:
    • 功能:将 Java 字段映射到节点的属性。
    • 参数:name 指定属性名(默认与字段名一致)。
    • 示例
      @Property(name = "uri")  // 对应节点的 uri 属性
      private String uri;

3. 关系映射(核心难点)​
  • ​**@Relationship 注解**:

    • 功能:定义节点间的关联关系(对应 Neo4j 的边)。
    • 参数:
      • type:关系类型(如 "SUBCLASS_OF")。
      • direction:关系方向(默认 OUTGOING)。
    • 示例
      public class OwlClass {
          // 定义 "SUBCLASS_OF" 关系(指向父类)
          @Relationship(type = "SUBCLASS_OF", direction = OUTGOING)
          private OwlClass parentClass;
      }
  • 关系的双向管理

    • 需在关联双方实体类中分别定义关系(需保持一致性)。
    • 示例:Person 与 Company 的 WORK_AT 关系:
      // Person 实体
      public class Person {
          @Relationship(type = "WORK_AT", direction = OUTGOING)
          private Company company;
      }
      
      // Company 实体
      public class Company {
          @Relationship(type = "WORK_AT", direction = INCOMING)
          private Set<Person> employees;
      }

4. 查询与持久化
  • Repository 接口

    • 继承 Neo4jRepository<T, ID>,提供 CRUD 和自定义查询能力。
    • 示例
      public interface OwlClassRepository extends Neo4jRepository<OwlClass, Long> {
          // 自定义 Cypher 查询
          @Query("MATCH (c:owl__Class) WHERE c.uri = $uri RETURN c")
          OwlClass findByUri(String uri);
      }
  • 派生查询(Derived Queries)​

    • 根据方法名自动生成 Cypher 查询(如 findByUri(String uri))。
    • 限制:复杂查询仍需手动编写 Cypher。

相关文章:

  • excel中两个表格的合并
  • 13年12月CCF-CSP认证第1题 --《最大的矩形》
  • 在centOS Linux系统搭建自动化构建工具Jenkins
  • JavaScript基础篇:五、 流程控制语句
  • RabbitMQ相关的面试题
  • 力扣——随机链表的复制
  • 界面组件DevExpress WPF中文教程:Grid - 如何显示嵌套栏(Bands)?
  • 基于ssm的宠物医院信息管理系统(全套)
  • Linux操作系统版本介绍
  • SpringCloud 学习笔记1(Spring概述、工程搭建、注册中心、负载均衡、 SpringCloud LoadBalancer)
  • QT编程之HTTP服务端与客户端技术
  • android lmkd.rc 介绍
  • 深度研究deep-research优秀开源项目
  • ABC 375
  • Android菜单栏
  • 网络爬虫-2:正则化
  • C#通过API接口返回流式响应内容---分块编码方式
  • 【计算机网络通信 AMQP】使用 Qt 调用 qamqp 库进行 AMQP 通信
  • DeepLabv3+改进11:在主干网络中添加CPCA注意力机制|聚焦于信息丰富的通道和重要区域
  • 基尔霍夫定律课后学习日志
  • 看展 | 黄永玉新作展,感受赤子般的生命力
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 流失海外79年,两卷战国帛书回归祖国
  • 海外考古大家访谈|冈村秀典:礼制的形成与早期中国
  • 湖南慈利一村干部用AI生成通知并擅自发布,乡纪委立案
  • 云南德宏州盈江县发生4.5级地震,震源深度10千米