目录

Springboot连接neo4j

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; }
  • 关系的双向管理
  • 需在关联双方实体类中分别定义关系(需保持一致性)。
  • 示例:PersonCompanyWORK_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 employees; }

4 查询与持久化
  • Repository 接口
  • 继承 Neo4jRepository,提供 CRUD 和自定义查询能力。
  • 示例 : public interface OwlClassRepository extends Neo4jRepository { // 自定义 Cypher 查询 @Query(“MATCH (c:owl__Class) WHERE c.uri = $uri RETURN c”) OwlClass findByUri(String uri); }
  • 派生查询(Derived Queries)​
  • 根据方法名自动生成 Cypher 查询(如 findByUri(String uri))。
  • 限制 :复杂查询仍需手动编写 Cypher。