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@GeneratedValueprivate Long id;@Propertyprivate 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 {@AutowiredPigReponsitory pigReponsitory;@Testvoid test() {Optional<Pig> byId = pigReponsitory.findById(2L); //注意此处传入的数据类型为LongPig 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@GeneratedValueprivate Long id;@StartNodeprivate Pig start;@EndNodeprivate Pig end;@Propertyprivate 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.rhkb.cn/news/15114.html

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

相关文章

【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解)

【后端开发】系统设计101——Devops&#xff0c;Git与CICD&#xff0c;云服务与云原生&#xff0c;Linux&#xff0c;安全性&#xff0c;案例研究&#xff08;30张图详解&#xff09; 文章目录 1、DevopsDevOps与SRE与平台工程的区别是什么&#xff1f;什么是k8s&#xff08;Ku…

01_Machine Vision_LSI及傅立叶变换

outline 图像分解和线性时不变系统二维傅立叶变换图像采样 图像分解和线性时不变系统 图像数学表达 图像由基本的像素点组成&#xff0c;如果将每一个像素点看作一个脉冲&#xff0c;则每个像素点的值可以看作是脉冲的幅值&#xff0c;这样图像就可以看作是由一系列脉冲组成…

elasticsearch实战三 elasticsearch与mysql数据实时同步

一 介绍 elasticsearch数据不是一直不变的&#xff0c;需要与mysql、oracle等数据库的数据做同步。 本博客里涉及到的项目地址&#xff1a;https://www.aliyundrive.com/s/7bRWpTYsxWV 方案一&#xff1a; 同步调用&#xff0c;即操作mysql数据后&#xff0c;接着操作elastic…

智能化食品安全管理:AI视频监控在大型商场的技术方案

前言 在卖场中&#xff0c;尤其是熟食区&#xff0c;AI视频监控的应用对于食品安全至关重要。通过AI视频监控系统&#xff0c;卖场可以实时监测食品处理环节中的每一个细节&#xff0c;从员工的个人防护到清洁操作&#xff0c;再到区域管理&#xff0c;全面提升食品安全管理的…

分析模式应用――帐务模式02

Party 模式中的层次结构模型支持多种灵活的层次结构&#xff0c;但这里我们只要关心上下级的包含关系就可以了&#xff0c;参加结算的称为结算实体BalanceEntity&#xff0c; 不可再拆分的称为LeafEntity&#xff0c; 可以包含下级结算实体的称为CompositeEntity&#xff0c;因…

什么是网络安全

1) 什么是网络安全 作为程序员&#xff0c;主要是面向产品的安全的问题。比如sql注入&#xff0c;xss&#xff0c;csrf&#xff0c;cookie窃取等等&#xff0c;都值得我们去思考。保证网站运行正常&#xff0c;客户数据安全。 2) sql注入 简单的说&#xff0c;就是利用表单提…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…

等级保护2.0|网络安全服务

等级保护2.0|网络安全服务 定义 对于国家秘密信息、法人和其他组织及公民专有信息以及公开信息的存储、传输、处理这些信息系统分等级实行安全保护&#xff0c;对信息系统中发生的信息安全时间分等级响应、处置。 思想 对信息安全实行等级化保护和等级化管理 目标 突出重…

Spatial Branching for Conic Non-Convexities in Optimal Electricity-Gas Flow

摘要—本文提出了一种基于几何的空间分支策略&#xff08; spatial branching strategy&#xff09;&#xff0c;用于解决集成电力-燃气系统中的圆锥非凸方程&#xff08; conic non-convex equations&#xff09;。所提出的策略嵌入在空间分支定界算法中&#xff0c;以求解最优…

ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景&#xff1a;在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法&#xff0c;如果仅为了解决BUG不论原…

【Redis】redis 存储的列表如何分页和检索

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

基于SpringBoot的线上历史馆藏管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Redis持久化机制详解

为什么需要持久化 Redis通常被作为缓存使用&#xff0c;但是Redis一旦宕机&#xff0c;内存中的数据全部丢失&#xff0c;可能会导致数据库崩溃。如果是从数据库中恢复这些数据就会存在频繁访问数据库和读取速度慢的问题。所以redis实现数据的持久化&#xff0c;是至关重要的。…

代码随想录算法训练营day38

代码随想录算法训练营 —day38 文章目录 代码随想录算法训练营前言一、322. 零钱兑换二维dp数组 二、279.完全平方数二维dp数组 三、139. 单词拆分多重背包背包问题总结问题类型递推公式遍历顺序 前言 今天是算法营的第38天&#xff0c;希望自己能够坚持下来&#xff01; 今日…

数据库高安全—审计追踪:传统审计统一审计

书接上文数据库高安全—角色权限&#xff1a;权限管理&权限检查&#xff0c;从权限管理和权限检查方面解读了高斯数据库的角色权限&#xff0c;本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…

【C++篇】 异常处理

目录 1&#xff0c;异常的概念及使用 1.1&#xff0c;异常的概念 1.2&#xff0c;异常的抛出和捕获 1.3&#xff0c;栈展开 1.4&#xff0c;异常的重新抛出 1.5&#xff0c;异常安全问题 1.6&#xff0c;异常规范 2&#xff0c;标准库中的异常 小结&#xff1a; 1&…

QT修仙之路1-1--遇见QT

文章目录 遇见QT二、QT概述2.1 定义与功能2.2 跨平台特性2.3 优点汇总 三、软件安装四、QT工具介绍(重要)4.1 Assistant4.2 Designer4.3 uic.exe4.4 moc.exe4.5 rcc.exe4.6 qmake4.7 QTcreater 五、QT工程项目解析(作业)5.1 配置文件&#xff08;.pro&#xff09;5.2 头文件&am…

python实现情绪识别模块,并将模块封装成可执行文件

目录&#xff1a; 1.源码&#xff1a;2.情绪识别模型运行流程&#xff1a;3.模型封装需要注意的地方&#xff1a;4.未解决问题&#xff1a; 1.源码&#xff1a; https://gitcode.com/xyint/deep_learning.git 2.情绪识别模型运行流程&#xff1a; 需要获取用户摄像头权限&…

网络防御高级02-综合实验

web页面&#xff1a; [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一&#xff0c;接口配置&#xff1a; SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…