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

news2025/3/16 10:26:36

一. 前言

本文介绍如何通过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.coloradmin.cn/o/2295705.html

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

相关文章

使用AI Agents集成外部API开发智能客服解决方案(上)

生成式AI的出现已经彻底改变了传统客服&#xff0c;为开发者和企业提供了更快速、更准确、更个性化的响应能力。其中由大语言模型&#xff08;LLM&#xff09;驱动的AI代理能够分析复杂的客户咨询&#xff0c;访问多个数据源&#xff0c;并提供相关的详细答案。在本文中&#x…

2025手机电池技术革新,

具有AlN势垒和AlGaN背势垒的硅基GaN HEMT在电池兼容电压下提供突破性的输出功率 新加坡的一个工程师团队声称&#xff0c;他们通过研究低压硅基GaN HEMT的双异质结构设计的潜力&#xff0c;开辟了新的天地。 这些研究人员认为&#xff0c;这类晶体管是5G频率范围2频段功率 具…

Linux系统-centos防火墙firewalld详解

Linux系统-centos7.6 防火墙firewalld详解 1 firewalld了解 CentOS 7.6默认的防火墙管理工具是firewalld&#xff0c;它取代了之前的iptables防火墙。firewalld属于典型的包过滤防火墙或称之为网络层防火墙&#xff0c;与iptables一样&#xff0c;都是用来管理防火墙的工具&a…

Unity3D仿星露谷物语开发28之切换场景

1、目标 Player可以在Scene1_Farm和Scene2_Field之间自动切换。通过Trigger实现该功能。同时创建一个预设体绑定该功能&#xff0c;这样可以把预设体放到任何场景中&#xff0c;通过配置即可实现Player在Scene之间的自由切换。 2、创建场景切换的工具对象 在Hierarchy中&…

阿里通义实验室提出AnyStory:开启个性化文本到图像生成的新篇章!

在这个数字化时代&#xff0c;生成式AI技术正以前所未有的速度改变着我们的创作方式。近期&#xff0c;阿里通义实验室发表了一篇题为《AnyStory: Towards Unified Single and Multi-Subject Personalization in Text-to-Image Generation》的论文&#xff0c;该论文提出了一种…

开启蓝耘之旅:DeepSeek R1 模型在智算平台的起步教程

----------------------------------------------------------我的个人主页-------------------- 动动你的手指----------------------------------------点赞&#x1f44d; 收藏❤--------------------------------------------------------------- 引言 在深度学习的广袤领…

ISAAC Sim 1.1. Isaac Sim 4.2.0 环境配置

我使用的系统是ubuntu20.04&#xff0c;根据推荐使用Binary installation 1.下载和安装 1.1. Isaac Sim 参照Installation using Isaac Sim Binaries — Isaac Lab Documentation完成ISAAC SIM安装。 1.2. Isaac Lab “Isaac Lab 提供您需要的工具&#xff0c;以便您根据项…

活动预告 | Power Hour: Copilot 引领商业应用的未来

课程介绍 智能化时代&#xff0c;商业应用如何实现突破&#xff1f;微软全球副总裁 Charles Lamanna 将为您深度解析&#xff0c;剖析其中关键因素。 在本次线上研讨会中&#xff0c;Charles Lamanna 将分享他在增强商业运营方面的独到见解与实战策略&#xff0c;深度解读商业…

Gemini 2.0模型更新:谷歌最新AI大模型全面开启智能时代

引言 2025年2月5日&#xff0c;谷歌人工智能实验室&#xff08;Google DeepMind&#xff09;发布了最新的Gemini 2.0模型系列更新&#xff0c;包括2.0 Flash、Flash-Lite和Pro实验版本。这些AI大模型的发布标志着人工智能技术在性能、效率和多模态能力上的进一步突破&#xff…

前端布局与交互实现技巧

前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中&#xff0c;经常需要将某个元素居中显示。以下是一种常见的实现方式&#xff1a; HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…

乘 DeepSeek 之风,破工作传统之浪,驶向智能高效新航道⭐

引言&#xff1a;当工作场景遭遇认知革命 在数字化转型的浪潮中&#xff0c;人工智能正以指数级速度重塑职场生态。DeepSeek作为国内领先的认知智能平台&#xff0c;其技术突破已超越简单的信息检索工具&#xff0c;正在演变为职场人的"第二大脑"。本文将系统解构De…

Chirpy3D:用于创意 3D 鸟类生成的连续部分潜在特征

Chirpy3D框架可以将细粒度的2D图像理解提升至3D生成的全新境界。当前的3D生成方法往往只关注于重构简单的对象&#xff0c;缺乏细致的特征和创造性。Chirpy3D通过结合多视角扩散模型和连续的部件潜在空间&#xff0c;能够生成全新且合理的3D鸟类模型。该系统不仅能够保持细致的…

viem库

viem是一个用于和以太坊进行交互的javascript库&#xff0c;它提供了简单的API进行智能合约的读取和写入操作&#xff0c;你可以使用它来与区块链上智能合约进行交互&#xff0c;查询链上数据等。 基本功能 1&#xff0c;创建公有客户端 createPublicClient 可以创建一个链接…

【每日一题 | 2025】2.3 ~ 2.9

个人主页&#xff1a;GUIQU. 归属专栏&#xff1a;每日一题 文章目录 1. 【2.3】P8784 [蓝桥杯 2022 省 B] 积木画2. 【2.4】P8656 [蓝桥杯 2017 国 B] 对局匹配3. 【2.5】[ABC365D] AtCoder Janken 34. 【2.6】P8703 [蓝桥杯 2019 国 B] 最优包含5. 【2.7】P8624 [蓝桥杯 2015…

整数拆分cpp

题目如下 思路&#xff1a;根据数论知识&#xff0c;要使乘积最大化&#xff0c;将该数拆分成3和2即可&#xff0c;一直对该数进行减三操作&#xff0c;直到该数小于等于4即可 代码如下 谢谢观看

DeepSeek之Api的使用(将DeepSeek的api集成到程序中)

一、DeepSeek API 的收费模式 前言&#xff1a;使用DeepSeek的api是收费的 免费版&#xff1a; 可能提供有限的免费额度&#xff08;如每月一定次数的 API 调用&#xff09;&#xff0c;适合个人开发者或小规模项目。 付费版&#xff1a; 超出免费额度后&#xff0c;可能需要按…

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤&#xff0c;无需本地部署模型&#xff0c;直接通过官网连接使用&#xff1a;1. 下载并安装OfficeAI插件 &#xff08;1&#xff09;访问OfficeAI插件下载地址&#xff1a;OfficeAI助手 - 免费办公智能AI助手, AI写作&#xff0c;下载…

神经网络常见激活函数 6-RReLU函数

文章目录 RReLU函数导函数函数和导函数图像优缺点pytorch中的RReLU函数tensorflow 中的RReLU函数 RReLU 随机修正线性单元&#xff1a;Randomized Leaky ReLU 函数导函数 RReLU函数 R R e L U { x x ≥ 0 a x x < 0 \rm RReLU \left\{ \begin{array}{} x \quad x \ge 0…

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理&#xff1a;屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

【Maven】项目管理工具-Maven

目录 1. Maven简介 1.1 项目管理 1.2 项目构建 1.3 项目构建工具 1.4 Maven的四大特征 1.4.1 依赖管理系统 1.4.2 多模块构建 1.4.3 一致的项目结构 1.4.4 一致的构建模型和插件机制 1.5 Maven模型 ​编辑 2.maven的安装配置 2.1 Maven的安装配置 2.1.1检测jdk的版…