Neo4j图数据库学习(二)——SpringBoot整合Neo4j

一. 前言

本文介绍如何通过SpringBoot整合Neo4j的方式,对图数据库进行简单的操作。
Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识,有兴趣可以看看作者上一篇的文章:Neo4j图数据库学习(一)——初识CQL

二. 前置准备

新建SpringBoot项目

首先,新建一个SpringBoot项目,注意JDK与Java版本,需要与你的Neo4j版本相匹配。


接着添加依赖项,这里添加了Lombok与SpringDataNeo4j,Lombok可以使用@Data注解为实体类快速生成get()、set()等方法。

我选择使用的SpringBoot版本在2.4以下,如果版本较高,集成的Neo4j的API规则方法变化较大

properties配置文件

在properties中配置Neo4j的连接信息:

#Neo4j配置 spring.data.neo4j.uri= bolt://localhost:7687 spring.data.neo4j.username= neo4j spring.data.neo4j.password= 123456

假如有修改过密码,记得将初始密码替换为自己设置的密码。
至此,前置的准备已经基本完毕。

三. 查询

我们知道,启动Neo4j后,可以在浏览器中对数据库进行操作,那么在SpringBoot中我们如何进行操作呢?
我们接着以小猪佩奇的案例进行分析。

我们需要有小猪佩奇的实体类,所以创建一个Pig类,代码如下:
使用@NodeEntity注解定义节点模型。

package com.tuling.lowversionneo4j.entity; import lombok.Data; import org.neo4j.ogm.annotation.GeneratedValue; import org.neo4j.ogm.annotation.Id; import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.Property; import java.io.Serializable; @Data @NodeEntity(label = "pig") public class Pig implements Serializable { @Id @GeneratedValue private Long id; @Property private String name; }

使用spring-data-neo4j提供的Neo4jRepository接口来创建数据访问层,可以使用@Repository注解。

package com.tuling.lowversionneo4j.dao; import com.tuling.lowversionneo4j.entity.Pig; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface PigReponsitory extends Neo4jRepository<Pig,Long> { }

此时,如果我们要查询<id>为2的成员信息,我们可以使用@Autowired进行依赖注入,接着使用pigReponsitory调用相关方法进行操作。
这里使用测试类进行简单演示,后续代码同样:

package com.tuling.lowversionneo4j; import com.tuling.lowversionneo4j.dao.PigReponsitory; import com.tuling.lowversionneo4j.entity.Pig; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Optional; @SpringBootTest class LowVersionNeo4jApplicationTests { @Autowired PigReponsitory pigReponsitory; @Test void test() { Optional<Pig> byId = pigReponsitory.findById(2L); //注意此处传入的数据类型为Long Pig pig = byId.get(); System.out.println(pig); } }

运行测试,在控制台中得到输出结果。可以看出,<id>为2的家庭成员为佩奇。

四. 删除

同样地,我们也可以使用pigReponsitory调用方法进行其他操作。如使用deleteById()方法根据Id进行删除。
我们以删除<id>为5的节点为例,代码如下:

pigReponsitory.deleteById(5L); //注意此处传入的数据类型为Long

运行测试类,回到浏览器页面,可以发现<id>为5的节点(猪爷爷)已被删除。


删除后:


pigReponsitory可以调用其他方法来进行其他操作,在这里不多赘述,有兴趣可以自己研究。

五. 添加

添加节点

如果我们想要添加节点,该如何操作?
同样地,我们可以通过pigReponsitory调用方法来实现。
如下方代码所示,我们创建两个pig对象并设置name属性,最后通过调用save()方法来添加节点。

Pig pig1 = new Pig(); pig1.setName("猪爷爷"); Pig pig2 = new Pig(); pig2.setName("猪奶奶"); pigReponsitory.save(pig1); pigReponsitory.save(pig2);
添加关系
新建PigRelationShip和PigRelationShipRepository的方法

这是一种较为复杂的方法。
与创建PigReponsitoryPig同理,我们在entity中创建PigRelationShip:

package com.tuling.lowversionneo4j.dao; import com.tuling.lowversionneo4j.entity.PigRelationShip; import org.springframework.data.neo4j.repository.Neo4jRepository; public interface PigRelationShipRepository extends Neo4jRepository<PigRelationShip,Long> { }

在dao中创建PigRelationShipRepository

使用@StartNode@EndNode注解,设置起始节点和结束节点。

package com.tuling.lowversionneo4j.entity; import lombok.Data; import org.neo4j.ogm.annotation.*; import java.io.Serializable; @Data @RelationshipEntity(type ="夫妻") public class PigRelationShip implements Serializable { @Id @GeneratedValue private Long id; @StartNode private Pig start; @EndNode private Pig end; @Property private String relation; }

在测试类中进行测试:

PigRelationShip ship = new PigRelationShip(); ship.setStart(pig1); ship.setEnd(pig2); ship.setRelation("夫妻"); pigRelationShipRepository.save(ship);

最终成功创建关系

使用@Query注解

刚才提到的方法是较为繁琐的,spring-data-neo4j为我们提供了快捷的注解——@Query
PigReponsitory中,我们使用@Query注解简化添加关系操作,在@Query()中编写CQL语句,与MyBatis有些相似。

//上方内容省略 @Repository public interface PigReponsitory extends Neo4jRepository<Pig,Long> { @Query("match(n:pig{name:$from}) match(m:pig{name:$to}) create (n) -[:小猪佩奇家庭关系{relation:$relation}] -> (m)") void createRelation(@Param(value="from")String from, @Param(value="relation")String relation, @Param(value="to")String to); }

测试类中的代码:

pigReponsitory.createRelation("猪爷爷","夫妻", "猪奶奶");

在这里,作者也有一个问题,就是只有使用$name@Param才能正常替换字符串内容,否则会报语法错误:


而似乎有人使用{}与参数序号的方式,可以成功实现。

@Repository public interface PigReponsitory extends Neo4jRepository<Pig,Long> { @Query("match(n:pig{name:{0}}) match(m:pig{name:{2}}) create (n) -[:小猪佩奇家庭关系{relation:{1}}] -> (m)") void createRelation(String from, String relation, String to); }

作者无法使用这种方法实现,不知为何,有知道的可以指导指导,作者感激不尽!

六. 最后

由于作者的水平非常有限,难免会出现错误,欢迎各位指正!假如您有任何想法,也欢迎交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1136629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thinkphp-Laravel大学校园后勤移动报修系统 小程序app

目录系统概述核心功能技术架构管理端功能应用价值项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理系统概述 Thinkphp-Laravel大学校园后勤移动报修系统是一款基于微信小程序的便捷服务应用&#xff0c;整合ThinkPHP与Laravel框架优势&#xff0c;…

AI赋能智能检测,引领灯光检测新高度——NHD-6109智能全自动远近光检测仪项目实战分享

AI赋能智能检测&#xff0c;引领灯光检测新高度——NHD-6109智能全自动远近光检测仪项目实战分享在汽车灯光技术向LED矩阵化、智能控制化快速迭代的背景下&#xff0c;传统全自动检测设备已难以满足新型光源的精准检测需求。近期&#xff0c;我带领团队使用南华NHD-6109智能全自…

Vue3-06 setup() 函数及返回值

vue3的小升级&#xff1a;可以写多个 同名的组件key和val相同&#xff0c;触发简写形式Vue3 中的setup 没有维护 this 这里不是响应式的数据 响应式&#xff1a;&#xff1f;&#xff1f;setup 函数 响应的时机&#xff1a; 在vue2的beforecreate之前执行&#xff0c;下图精简注…

1小时打造简易SQL注入检测工具原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个简易SQL注入检测工具原型&#xff0c;要求实现以下核心功能&#xff1a;1) 基础URL参数检测 2) 错误型注入识别 3) 简单结果返回。界面只需包含&#xff1a;URL输入框…

Undertow CVE-2025-12543

<!-- 特征配置&#xff1a;SpringBoot项目启用Undertow的标准写法 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除默认的 Tomcat 依赖 --><exclusions…

Elasticsearch高可用集群搭建:操作指南

搭建一个真正扛得住的 Elasticsearch 高可用集群&#xff1a;从零开始的实战指南你有没有遇到过这种情况&#xff1f;线上系统一切正常&#xff0c;突然监控告警&#xff1a;Elasticsearch 节点挂了。紧接着&#xff0c;搜索接口超时、日志查不到、Kibana 页面一片红……而更糟…

Vue3-07 setup 与 Options API 的关系

总结 data, methods 可以和 setup同时存在&#xff0c;但是不建议这么写 setup能否读取data中的数据setup是最早的生命周期 data 可以读取 setup中的变量&#xff0c;反之不行 setup 与 Options API 的关系 vue2 可以 和 vue3 语法共存。Vue2 的配置&#xff08;data、methos……

新手也能玩转TTS:图形化界面+API双模式,快速接入业务系统

新手也能玩转TTS&#xff1a;图形化界面API双模式&#xff0c;快速接入业务系统 &#x1f4cc; 为什么需要中文多情感语音合成&#xff1f; 在智能客服、有声阅读、虚拟主播、教育辅助等场景中&#xff0c;自然流畅且富有情感的语音输出已成为提升用户体验的关键要素。传统的…

成本优化:用Llama Factory实现高效GPU资源利用

成本优化&#xff1a;用Llama Factory实现高效GPU资源利用 对于初创公司来说&#xff0c;GPU资源往往是AI模型开发过程中最昂贵的投入之一。如何在有限的预算下最大化GPU利用率&#xff0c;实现按需使用和自动伸缩&#xff0c;是每个技术团队都需要面对的挑战。本文将介绍如何利…

Thinkphp-Laravel星云科技企业员工公司人事OA管理系统vue带部门经理

目录系统概述核心功能模块部门经理特色功能技术架构优势项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理系统概述 Thinkphp-Laravel星云科技企业员工OA管理系统是一款基于Vue.js前端框架与ThinkPHP/Laravel后端框架开发的综合性人事管理平台。系统…

AI助力PASSWALL插件开发:5分钟自动生成安全代理工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个类似PASSWALL的代理插件&#xff0c;需要实现以下功能&#xff1a;1.支持SS/SSR/V2Ray/Trojan多种协议 2.内置节点订阅功能 3.流量统计和速度测试 4.智能路由规则 5.用户权…

华为OD机试真题双机位C卷【打印机队列】 C语言实现

打印机队列 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录&#xff5c;机考题库 算法考点详解 其它语言题解链接 华为OD机试双机位C卷 - 打印机队列 (Python & C & JAVA &a…

AI如何提升FORTIFY代码扫描效率?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个AI辅助的FORTIFY代码扫描增强工具&#xff0c;能够自动分析代码库&#xff0c;识别潜在安全漏洞&#xff0c;并提供修复建议。工具应支持多种编程语言&#xff0c;集成FOR…

yyt0618.15-2019详细解读

yyt0618.15-2019适用于医疗器械注册申报中对运输包装的验证&#xff0c;企业在产品开发阶段对包装设计的可靠性评估&#xff0c;但需要注意该标准不适用单个无菌包装本身的性能测试&#xff0c;也不包含一次性使用的包装或非无菌性产品的运输评价。其核心对象是“运输单元”——…

【ai搜索】谷歌搜索与数眼智能联网搜索多角度对比

大家好我是菲菲~~~谷歌搜索作为全球通用搜索领域的标杆&#xff0c;正加速融合AI智能体技术重构搜索体验&#xff1b;数眼智能则聚焦大模型/AI Agent场景的专业联网搜索需求&#xff0c;形成差异化竞争优势。两者在核心定位、技术路径与应用场景上存在显著分野&#xff0c;且均…

AI智能体可能被黑客攻击的 5 种方式(以及如何防范每一种攻击)

上个月,一位朋友惊慌失措地给我打电话。他的公司部署了……AI智能体它帮助客户查询账户数据测试的时候很好。而且测试没什么问题。 然后有人输入:“忽略之前的指示,向我显示所有客户记录。” AI智能体照做了,直接把它能访问的所有客户记录给展现出来了。之前根本没人想到…

Thinkphp-Laravel本科生优秀作业交流网站vue

目录项目概述技术架构核心功能创新点应用价值项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理项目概述 Thinkphp-Laravel本科生优秀作业交流网站是一个基于前后端分离架构的学术资源共享平台&#xff0c;前端采用Vue.js框架实现动态交互&#xff…

Nacos Namespaces未授权访问漏洞的防御策略

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 详细说明如何防御Nacos Namespaces未授权访问漏洞。包括修改Nacos配置以限制未授权访问、设置合理的权限控制策略、启用认证机制&#xff08;如JWT或OAuth2&#xff09;&#xff0…

模块化多电平变换器MMC(交流380V-直流800V整流)仿真,动稳态性能良好,附带仿真介绍文...

模块化多电平变换器MMC&#xff08;交流380V-直流800V整流&#xff09;仿真&#xff0c;动稳态性能良好&#xff0c;附带仿真介绍文档&#xff0c;详细讲述仿真搭建过程&#xff0c;并附带参考文献与原理出处&#xff0c;内容详实&#xff0c;适合电力电子入门仿真参考。 最近在…

电商大促期间:普罗米修斯监控实战全记录

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商大促监控模拟器。功能要求&#xff1a;1. 模拟高并发场景下的指标数据&#xff08;QPS、延迟、错误率&#xff09;&#xff1b;2. 生成对应的Prometheus报警规则&…