一、前言
随着社交、电商、金融等行业的发展,现实社会的关系构成了一张复杂而庞大的关系网。传统数据库在处理关系运算时往往面临算力瓶颈,即便引入大数据技术,随着数据量增长,多表关联查询的性能也会急剧下降。因此,支持海量数据关系计算的图数据库应运而生。
二、图数据库 Neo4j 介绍
2.1 什么是图数据库
图数据库(Graph Database)是一种专门用于存储和查询图结构数据的数据库。它不同于传统的关系型数据库(如 MySQL、Oracle,用表和列存储数据)和 NoSQL 数据库(如 MongoDB,用文档存储数据),而是通过节点(Node)、关系(Relationship)和属性(Property)来直接表达数据间的连接。
2.2 Neo4j 是什么
Neo4j 是目前最流行的开源图数据库之一,采用原生图存储引擎,能够高效地处理深度关联查询。
2.3 Neo4j 特点与功能
2.3.1 Neo4j 核心特点
原生存储、高性能遍历、灵活的模式设计。
2.3.2 Neo4j 核心功能
支持 Cypher 查询语言,提供丰富的图算法库。
三、环境准备
3.1 Neo4j 服务搭建过程
推荐使用 Docker 快速部署。
3.1.1 下载镜像
拉取官方镜像:docker pull neo4j:latest
3.1.2 创建目录
准备持久化数据目录,例如 /data/neo4j。
3.1.3 启动容器
执行命令:
docker run --name neo4j -d \
-p 7474:7474 -p 7687:7687 \
-v /data/neo4j/data:/data \
-e NEO4J_AUTH=neo4j/password \
neo4j:latest
注意端口映射,7474 为 Web 界面,7687 为 Bolt 协议端口。
3.1.4 访问 neo4j web 界面
浏览器打开 http://localhost:7474,使用默认账号登录。
四、SpringBoot 整合 Neo4j
4.1 前置准备
4.1.1 版本选择
Spring Boot 2.x 及以上版本均支持 Spring Data Neo4j。
4.1.2 导入依赖
在 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
4.1.3 添加配置文件
application.yml 中配置连接信息:
spring:
neo4j:
uri: bolt://localhost:7687
username: neo4j
password: password
4.2 代码整合过程
4.2.1 自定义节点与实体类映射
定义 Person 实体,使用 @NodeEntity 标记节点类型:
@NodeEntity(label = "Person")
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private int age;
// getters and setters
}
这里要注意,Neo4j 会自动将字段映射为属性,主键由框架生成。
4.2.2 自定义 jpa
继承 Neo4jRepository 接口即可自动获得 CRUD 能力:
public interface PersonRepository extends Neo4jRepository<Person, Long> {
List<Person> findByName(String name);
}
方法名遵循约定,无需手写 SQL 类似语句。
4.3 代码整合测试
4.3.1 保存 Person 以及关系数据
在 Service 层注入 Repository,调用 save 方法。若需建立关系,可使用 Relationship 对象或直接操作图结构。
4.3.2 查询数据
调用 Repository 中的自定义方法,或通过 @Query 注解编写 Cypher 语句进行复杂查询。
4.3.3 JPA 自定义方法规则
遵循 Spring Data 命名规范,如 findByAgeGreaterThan 等,也可结合 Cypher 实现特定逻辑。
五、写在文末
通过上述步骤,我们完成了 Spring Boot 与 Neo4j 的基础整合。在实际项目中,建议根据业务复杂度合理设计图模型,避免过度关联导致性能下降。


