Spring Data Neo4j

【Neo4j系列】Neo4j概念简介及整合SpringBoot 本文将针对Neo4j相关概念进行介绍,同时讲解Neo4j整合SpringBoot的详细步骤。 阅读详情

问题

使用响应式编程方式来访问Neo4j,这里假设已经准备好Neo4j服务器了。

Spring Initializr

https://start.spring.io/
在这个界面初始化工程:
Spring Data Neo4j

application.properties

spring.neo4j.uri=neo4j://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=neo4j
spring.data.neo4j.database=neo4j
logging.level.org.springframework.data.neo4j=DEBUG

这里需要稍微了解一下neo4j的两种协议:

  • neo4j://:这种协议主要针对neo4j集群或neo4j节点;
  • bolt://:主要用于管理neo4j单个节点,不支持集群。
    值得注意的是,neo4j+s://,表示使用证书认证;neo4j+ssc://,表示使用自签名证书认证连接数据库。简单来说,+s,表示使用证书加密连接数据库;+ssc,表示使用自定义证书加密连接数据库。
    我们这里使用的neo4j社区版本不支持集群。

domain

PersonEntity.java

package com.example.neo4j3.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Node;

@Node("Person")
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PersonEntity {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private Integer born;
}

MovieEntity.java

package com.example.neo4j3.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.neo4j.core.schema.*;

import java.util.HashSet;
import java.util.Set;

import static org.springframework.data.neo4j.core.schema.Relationship.Direction.INCOMING;

@Node("Movie")
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MovieEntity {
    @Id
    @GeneratedValue
    private Long id;
    private String title;
    @Property("tagline")
    private String description;
    @Relationship(type = "ACTED_IN", direction = INCOMING)
    private Set<PersonEntity> actors = new HashSet<>();
    @Relationship(type = "DIRECTED", direction = INCOMING)
    private Set<PersonEntity> directors = new HashSet<>();
}

repository

这主要使用ReactiveNeo4jRepository来进行操作neo4j。

MovieRepository.java

package com.example.neo4j3.repository;

import com.example.neo4j3.domain.MovieEntity;
import org.springframework.data.neo4j.repository.ReactiveNeo4jRepository;
import reactor.core.publisher.Mono;

public interface MovieRepository extends ReactiveNeo4jRepository<MovieEntity, Long> {
    Mono<MovieEntity> findOneByTitle(String title);
}

这里需要注意一下,使用响应式编程,如果返回0或1个对象需要使用Mono类包装,如果是返回一个数组需要使用Flux类包装。

PersonRepository.java

package com.example.neo4j3.repository;

import com.example.neo4j3.domain.PersonEntity;
import org.springframework.data.neo4j.repository.ReactiveNeo4jRepository;

public interface PersonRepository extends ReactiveNeo4jRepository<PersonEntity, Long> {
}

controller

MovieController.java

package com.example.neo4j3.controller;

import com.example.neo4j3.domain.MovieEntity;
import com.example.neo4j3.repository.MovieRepository;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import javax.annotation.Resource;

@RestController
@RequestMapping("/movies")
public class MovieController {
    @Resource
    private MovieRepository movieRepository;
    @PutMapping
    Mono<MovieEntity> createOrUpdateMovie(@RequestBody MovieEntity newMovie) {
        return movieRepository.save(newMovie);
    }

    @GetMapping(value = { "", "/" })
    Flux<MovieEntity> getMovies() {
        return movieRepository.findAll();
    }

    @GetMapping("/by-title")
    Mono<MovieEntity> byTitle(@RequestParam String title) {
        return movieRepository.findOneByTitle(title);
    }

    @DeleteMapping("/{id}")
    Mono<Void> delete(@PathVariable Long id) {
        return movieRepository.deleteById(id);
    }
}

Neo4jConfig.java

package com.example.neo4j3.config;

import org.neo4j.driver.Driver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider;
import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager;
import org.springframework.data.neo4j.repository.config.ReactiveNeo4jRepositoryConfigurationExtension;
import org.springframework.transaction.ReactiveTransactionManager;

@Configuration
public class Neo4jConfig {
    @Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
    public ReactiveTransactionManager reactiveTransactionManager(
            Driver driver,
            ReactiveDatabaseSelectionProvider databaseNameProvider) {
        return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
    }
}

验证

插入1条数据

curl -X "PUT" "http://localhost:8080/movies" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "title": "Aeon Flux",
  "description": "Reactive is the new cool"
}'
{"id":3,"title":"Aeon Flux","description":"Reactive is the new cool","actors":[],"directors":[]}%

查询所有数据

curl http://localhost:8080/movies
[{"id":3,"title":"Aeon Flux","description":"Reactive is the new cool","actors":[],"directors":[]}]%

条件查询

curl http://localhost:8080/movies/by-title\?title\=Aeon%20Flux
{"id":3,"title":"Aeon Flux","description":"Reactive is the new cool","actors":[],"directors":[]}%

删除数据

curl -X DELETE http://localhost:8080/movies/3

总结

参考:

Springboot集成neo4j实现知识图谱关系图 使用neo4j来完成人员关系公司项目有一个功能需要将各个人员关系列出,在参加评选的时候,进行展示和筛选。 阅读详情

相关推荐

Spring Data Neo4j个人笔记

Neo4j、Spring、图数据库、Spring Data Neo4j

倒着走的码农 6917

Spring Data Neo4j 中文文档

Spring Data Neo4j 中文文档

weixin_45119331的博客 8101

后端技术新宠:Spring Data Neo4j 入门指南

本指南的主要目的是帮助开发者快速入门 Spring Data Neo4j。范围涵盖了从基本概念的理解到实际项目的开发,包括核心概念的介绍、算法原理的讲解、数学模型的分析、项目实战的演练以及应用场景的探讨等方面。通过本指南,开发者能够掌握 Spring Data Neo4j 的基本使用方法,了解其在后端开发中的应用价值,并能够在实际项目中运用该技术。本文将按照以下结构进行组织:首先介绍背景信息,包括目的、预期读者和文档结构;接着阐述 Spring Data Neo4j 的核心概念与联系,包括原理和架构;

架构师的AI之路,分享AI应用开发架构的学习与实践。 1056

SpringDataNeo4j使用详解

KeywordSampleAfterBeforeInBetweenEndingWithExistsTrueFalseIsNotNullNullLessThanLikeNotLikeNearRegexAndOr/*** 运输路线相关操作*//*** 查询两个网点之间最短的路线,查询深度为:10* @param start 开始网点* @param end 结束网点* @return 路线*/

几许的博客 1640

Spring认证中国教育管理中心-Spring Data Neo4j教程一

原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器。请通过您的依赖管理包含启动模块并配置要使用的螺栓 URL,例如org.neo4j.driver.uri=bolt://localhost:7687. 启动器假定服务器已禁用身份验证。由于 SDN 启动器依赖于 Java 驱动程序的启动器,因此有关配置的所有内容在此处也适用。有关可用属性的参考,请使用org.neo4

IT胶囊 1307

【微服务】springboot整合neo4j使用详解

springboot整合neo4j使用详解

congge_study的博客 7625

java连接neo4j(使用spring data neo4j)

1. Spring Data Neo4j概述 认识Spring-Data-Neo4j之前,需要先对OGM有一个了解 OGM即对象图映射(Object Graph Mapper ,简称ORM ),基于OGM可以将neo4j中的图模型快速转换成java中的对象。 下面给出Spring Data Neo4j的定义 Spring Data Neo4j 简称SDN,是一个对象-图形映射(OGM)框架,是为了简化开发者的工作而创建的,它的目的是通过处理所有底层工作和从Neo4j读域实体并写回去所必须的映射逻辑来提高效

hbwddd的博客 8824

Neo4j 与 Spring Data Neo4j 整合开发实战

Neo4j 是一款高性能的图数据库,采用图数据模型,以节点和关系的形式存储数据。其具备高效的数据查询与存储能力,在处理复杂关系数据方面表现出色,广泛应用于社交网络、知识图谱、推荐系统等诸多领域。Spring Data Neo4j 是 Spring 数据访问框架的重要组成部分,旨在简化 Neo4j 与 Spring 应用的集成。它提供了高级抽象,支持声明式数据访问、复杂查询以及自动映射等功能,从而使开发者能够更专注于业务逻辑的实现,提高开发效率。创建一个名为@Node@Id。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1232

Spring Data Neo4j 开源项目指南

### 简介 Spring Data Neo4j 是一个高度集成化的库,专为使用 Spring 框架或 Spring Boot 的Java开发者设计,目的是让开发人员能够更高效地在应用程序中利用 Neo4j 图数据库。此项目不仅简化了数据访问层,还提供了对 Neo4j 的对象映射支持,以及事务处理和响应式编程的支持。 ### 核心特性 - **对象图形映射(OGM)**: 自动管理实体类和图

gitblog_00543的博客 654

后端项目中 Spring Data Neo4j 的使用攻略

本文旨在为Java后端开发者提供Spring Data Neo4j的完整使用指南,内容涵盖从基础配置到高级特性的全栈知识。重点讲解如何利用Spring Data Neo4j处理图数据结构,实现高效的节点和关系操作。本文采用渐进式结构,首先介绍核心概念,然后深入实现细节,最后探讨高级主题和优化策略。包含大量代码示例和性能对比数据,便于读者实践验证。节点(Node): 图数据库中的基本数据单元,相当于关系型数据库中的行关系(Relationship): 连接两个节点的有向边,可以包含属性标签(Label)

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1169

Neo4j与Spring Data的集成实践指南

Neo4j作为高性能的NoSQL图数据库,其独特的数据存储和查询方式特别适合处理复杂的关系数据。而Spring Data作为Spring框架的一部分,为数据访问层提供了统一的编程模型,极大地简化了各种持久化技术的使用。当Neo4j遇到Spring Data,不仅能够发挥图数据库在处理关系型数据方面的优势,还能借助Spring Data强大的抽象层,提高开发效率。在本章中,我们将探讨Neo4j与Spring Data集成的基本概念,为后续章节的深入学习打下坚实的基础。

weixin_34511754的博客 1235

Spring Data Neo4j 学习

根据这个 https://github.com/WuYiheng-Og/neo4j_springboot 来实践本文将会结合官网的一个 【导演-电影-演员】关系图来进行实现。以新海诚导演的《你的名字》为例。

TMesh的博客 903

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1737

Spring Data Neo4j使用

我们现在可以发现基础已经提供好的curd很少,我们也可以自定义一些简单一些的操作。JPA自定义方法规则只要我们在接口中所写的方法名字与下表中的格式一致,neo4j也会自动帮我们生成cql语句KeywordSampleAfterBeforeInBetweenEndingWithExistsTrueFalseIsNotNullNullLessThanLikeNotLikeNearRegexAndOr。

luosuss的博客 2063

偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记

①模型整体拟合指标(Goodness-of-Fit, GOF),这个可以看做整体的R方了,上限是1;②指标载荷的具体值;然而,当数据中包含潜变量(即由多个观测指标组合而成的综合概念)时,贝叶斯结构方程不太适用。指标过少(1-2 个)会削弱潜变量的解释力,而指标过多可能增加噪声,影响模型稳定性。如果指标较多,可考虑进一步划分潜变量,但应确保每个指标有意义。掌握这两类方法后,在处理多变量、因果或路径分析研究时,可以根据数据特点与研究需求灵活选择。对于一般的多变量研究,这两类结构方程均为常用且有效的分析方案。

qq_44684643的博客 2011

软考高级-系统架构设计师 论文范文参考(一)

系统架构设计师 论文参考

片言可决讼,半纸能缚龙 4341

Neo4j学习笔记(二) SpringMVC中使用Spring Data Neo4j

一.pom.xml中添加spring-data-neo4j依赖 •实验中使用独立的Neo4j服务器,采用bolt协议访问。如果是使用嵌入式neo4j或者使用http协议,需要添加其他依赖。 •5.3.4.RELEASE版本的spring-data-neo4j需要至少 Neo4j 3.4以上 Spring Framework 5.2.9.RELEASE以上 <!-- Neo4j --> <dependenc...

浪子天涯行世录 2247

使用Python爬虫抓取公共交通网站的时刻表

Python爬虫是一种通过自动化方式从网页中抓取数据的程序。爬虫通过模拟用户请求,获取网站的HTML页面内容,并通过解析这些HTML内容,提取出我们需要的信息。requests:用于向网站发送HTTP请求并获取响应。:用于解析HTML文档,提取数据。Selenium:用于处理动态加载的网页,模拟浏览器操作。pandas:用于数据处理和分析,方便存储和操作抓取到的数据。本文介绍了如何使用Python爬虫抓取公共交通网站的时刻表,并提取其中的关键信息。我们使用了requestsSelenium和。

2201_76125261的博客 1119

访问Neo4j spring-data-neo4j入门 (一)

Spring-data-neo4j实例入门 本文通过一个简单的电影和演员的实例简要介绍如何使用spring-data-neo4j访问neo4j数据库。 关于图数据库的理论以及使用场景不在本文的讨论访问,关于图数据库和关系数据库的比较也不在本文的讨论范围。 本文主要介绍一个简单的使用场景,就是Movie和Person, person和movie的关系有actor和director, 一个movi...

russle的专栏 2万+

5.13华为OD机试真题 新系统 - 社交网络相同爱好好友查询 (Java/Py/C/C++/Js/Go)

5.13华为OD机试真题 新系统 - 社交网络相同爱好好友查询 (Java/Py/C/C++/Js/Go)

算法大师! 154

php环境如何实现国密SM2相关功能

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1616

【亲测免费】 Spring Data Neo4j 项目教程

Spring Data Neo4j 项目的目录结构通常遵循标准的 Maven 或 Gradle 项目结构。以下是一个典型的目录结构及其介绍: ``` spring-data-neo4j/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/ │ │ │ ├── Application.jav

gitblog_00554的博客 592

RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络

本文记录的是利用颈部结构优化RT-DETR的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 2228

Neo4j入门第二期(Spring Data Neo4j的使用)

*** 运输路线相关操作*//*** 查询两个网点之间最短的路线,查询深度为:10* @param start 开始网点* @param end 结束网点* @return 路线*/

m0_74016429的博客 1093

从零开始学习AI人工智能本体论:概念与实战

本文旨在为初学者提供一个全面而易于理解的人工智能本体论入门指南。我们将覆盖从基本概念到实际应用的全过程,帮助读者理解本体论在AI系统中的核心作用。核心概念与联系:介绍本体论的基本概念和原理核心算法与操作步骤:详细讲解本体构建和推理方法项目实战:通过实际案例展示本体论的应用实际应用场景:探讨本体论在不同领域的应用未来发展趋势:展望本体论在AI领域的前景本体论(Ontology): 在AI中,指对特定领域概念及其关系的明确形式化描述。

AI智能探索者的博客 867

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: Neo4j之HAL版REST(Spring)
下一篇: cypher一些语法
亚林瓜子
博客等级 码龄16年 1209粉丝 743原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值