纯Spring方式使用spring-data-neo4j

Spring Data Neo4j个人笔记 Neo4j、Spring、图数据库、Spring Data Neo4j 阅读详情

笔者以spring-data-neo4j-5.0.5为例,侧重使用纯spring的方式使用neo4j实现图库的增删改查。

spring-boot的方式网上资料很多,不是笔者今天的关注点,因为大部分工作spring-boot都做好了,开发者要做的很少。

这里简单使用一个domain,和一个repository模拟一个节点插入的场景。

节点定义

AssetNodeNeo.java

@NodeEntity
@Getter
@Setter
@RequiredArgsConstructor
public class AssetNodeNeo {
    @Id
    @GeneratedValue
    private Long id;
    private Long assetId;
    private String logicName;
    private String physicsName;
    private Long storageId;
    private long modifyTime;
    
    public AssetNodeNeo(Long assetId, String logicName, String physicsName, Long storageId, long modifyTime) {
        this.assetId = assetId;
        this.logicName = logicName;
        this.physicsName = physicsName;
        this.storageId = storageId;
        this.modifyTime = modifyTime;
    }
}
持久层定义

AssetNodeRepository.java

public interface AssetNodeRepository extends Neo4jRepository<AssetNodeNeo,Long>,CustomizedRepository {
}

这里继承Neo4jRepository,既spring-data-neo4j-4.x的GraphRepository,对增删改查做好了封装,相当于关系型的jdbcTemplate。

逻辑层定义

TestService.java

@Service
public class TestService {
    @Autowired
    private AssetNodeRepository assetNodeRepository;
    public void createNode() {
        AssetNodeNeo a1 = new AssetNodeNeo(257L, "a1", "a1", 6L,
            System.currentTimeMillis());
        assetNodeRepository.save(a1);
    }
}

笔者模拟的逻辑很简单,加载spring容器,然后使用TestService将a1节点插入图库中。
下面分别使用java config和xml两种方式来实现:

java config方式运行

neo4j配置:

@Configuration
@ComponentScan(basePackages = {"com.yq.service"})
@EnableNeo4jRepositories(basePackages = "com.yq.repository")
public class Neo4jConfiguration {

    @Bean
    public org.neo4j.ogm.config.Configuration configuration() {
        Neo4jProperties properties = new Neo4jProperties();
        properties.setUri("bolt://localhost:7688");
        properties.setUsername("neo4j");
        properties.setPassword("123123");
        org.neo4j.ogm.config.Configuration configuration = properties.createConfiguration();
        return configuration;
    }

    @Bean
    public SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration) {
        return new SessionFactory(configuration, "com.yq.domain");
    }

    @Bean
    public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory) {
        return new Neo4jTransactionManager(sessionFactory);
    }
}

@Configuration 生命这是一个spring配置类
@ComponentScan(basePackages = {“com.yq.service”}) 扫描逻辑层的所有service
@EnableNeo4jRepositories(basePackages = “com.yq.repository”) 扫描neo4j的持久层
分别声明了session工厂、事物管理器等3个bean,和官网类似

启动类:

public class SpringApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Neo4jConfiguration.class);

        TestService testService = context.getBean(TestService.class);
        testService.createNode();
        context.stop();
    }
}

xml方式运行

xml配置:

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:context="http://www.springframework.org/schema/context"
    xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/data/neo4j
        http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">

    <context:component-scan base-package="com.yq"/>

    <bean id="sessionFactory" class="com.yq.conf.Neo4jSessionFactory" factory-method="getSessionFactory">
        <constructor-arg name="uri" value="bolt://localhost:7688"/>
        <constructor-arg name="username" value="neo4j"/>
        <constructor-arg name="password" value="123123"/>
        <constructor-arg name="domainPackage" value="com.yq.domain"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.data.neo4j.transaction.Neo4jTransactionManager">
        <constructor-arg ref="sessionFactory"/>
    </bean>

    <neo4j:repositories base-package="com.yq.repository"/>
</beans>

<context:component-scan base-package=“com.yq”/> 扫描业务层
<neo4j:repositories base-package=“com.yq.repository”/>扫描neo4j持久层
分别声明了session工厂、事物管理器2个bean,和java config方式类似

由于org.neo4j.ogm.session.SessionFactory构造方法入参比较复杂,这里笔者封装了Neo4jSessionFactory静态工厂方法用于构造sessionFactory对象,具体如下:
Neo4jSessionFactory.java

@Setter
public class Neo4jSessionFactory {

    /**
     * Create instance of  {@link SessionFactory}.
     *
     * @param uri URI used by the driver. Auto-detected by default.
     * @param username Login user of the server.
     * @param password Login password of the server.
     * @param domainPackage The packages to scan for domain objects.
     */
    public static SessionFactory getSessionFactory(String uri, String username, String password, String domainPackage) {
        Neo4jProperties properties = new Neo4jProperties();
        properties.setUri(uri);
        properties.setUsername(username);
        properties.setPassword(password);
        org.neo4j.ogm.config.Configuration configuration = properties.createConfiguration();
        return new SessionFactory(configuration, domainPackage);
    }
}

启动类:

public class SpringApplication {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "classpath:spring.xml");

        TestService testService = context.getBean(TestService.class);
        testService.createNode();
        context.stop();
    }
}

上面两种方式经测试皆可行,执行后,查看图库:
在这里插入图片描述


参考文档:
spring-data-neo4j

Neo4j 4.x 社区版数据导入及Spring-Data-Neo4j 5.x、6.x使用案例 Neo4j 4.x 社区版数据导入及Spring-Data-Neo4j 5.x、6.x使用案例背景及版本介绍Neo4j 4.3.6数据导入SDN使用案例SDN 5.3.5 使用案例Entity节点类关系类RepositorySDN 6.1.5 使用案例 背景及版本介绍 最近看因为工作原因开始接触Neo4j,发现Neo4j本身资料就比较少,而且版本差异比较大,比较流行的书籍《Neo4j权威指南》用是的3.x 社区版(使用Java8),而我由于本机装的是java11,一开始使用的就是社区版 4.3.6,因此很多 阅读详情

相关推荐

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 功能使用

1.使用Neo4jRepository 进行查询,可以使用jpa进行查询。2. 使用cypher进行查询。

fengxing_2的专栏 1519

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

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

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

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...

浪子天涯行世录 2248

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

springboot整合neo4j使用详解

congge_study的博客 7625

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

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

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

Spring Data Neo4j

问题 使用响应式编程方式来访问Neo4j,这里假设已经准备好Neo4j服务器了。 Spring Initializr https://start.spring.io/ 在这个界面初始化工程: application.properties spring.neo4j.uri=neo4j://localhost:7687 spring.neo4j.authentication.username=neo4j spring.neo4j.authentication.password=neo4j spring.dat

fxtxz2的专栏 4257

Neo4j 与 Spring Data Neo4j 整合开发实战

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

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

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

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

russle的专栏 2万+

Neo4j与Spring Data的集成实践指南

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

weixin_34511754的博客 1236

激光可燃气体传感器:核心技术环节分析

激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字)

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1043

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的博客 8825

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1165

Spring Data Neo4j使用

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

luosuss的博客 2063

LaTeX小白必看:5分钟搞定GB/T 7714-2005参考文献格式(Texmaker+BibTeX实战)

本文为LaTeX初学者提供了使用Texmaker编辑器和BibTeX工具链,快速实现GB/T 7714-2005参考文献格式的实战指南。文章详细解析了从获取gbt7714-2005.bst样式文件、编写.bib数据库到四步编译流程的核心步骤,并附有常见问题解决方案,帮助用户高效、准确地完成学术论文的参考文献排版。

weixin_29295541的博客 338

基于深度学习的UWB门禁检测

针对基于UWB技术智能门禁管理系统,由于测距误差或非视距原因导致门禁产生不合理动作的现象。分析如何采用基于深度学习的方法,通过对TWR测距数据、TWR监听数据、到达角度差(PDOA)、信道脉冲响应(CIR)等数据维度进行深度学习,利用 TensorFlow建立相应的推导模型,对卡片姿态进行更加精准可靠的检测,从而更好完成闸机开合控制。

tenth_quadrant的博客 2027

Java调用Neo4j常用方式

Java调用Neo4j验证

后端平凡的博客 6968

网络工程师的Python入门实战:手把手教你写交换机配置备份脚本

本文详细介绍了如何利用Python为网络工程师开发一个高效的交换机配置备份脚本,涵盖环境搭建、设备连接方案、智能设备发现、多因素认证、异常处理、配置差异对比等关键步骤。通过实战案例展示如何将备份时间从4小时缩短至15分钟,显著提升运维效率,特别适用于华为交换机等设备的配置导出与备份需求。

weixin_30291791的博客 304

史上最全面的Neo4j使用指南

Neo4j图形数据库教程 Neo4j图形数据库教程 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.测试 第三章:CQL 1.CQL简介 2.Neo4j CQL命令/条款 3.Neo4j CQL 函数 4.Neo4j CQL数据类型 第四章:...

weixin_34314962的博客 8316

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

字节系,ali系,ks,pdd最新抓包方案

各大厂安卓逆向

qq_38759383的博客 1145

spring-data-neo4j 使用和总结

上一篇博客写了neo4j的下载安装以及简单的使用,这篇主要写在开发的时候遇到的一些坑和问题,同时也是自己的一个总结。 首先列出几个问题: 1.neo4j如何返回多个类型的关系和节点。 2.spring-data-neo4j 如何在dao层中自定义传参,或者自己拼接好cql当做参数传入dao层 3. 第一个问题:开发的时候我有两种节点 Person和Bo...

Breaking_xu的博客 7530

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

将电位器Rp调至中心位置,用双综示波器观察并绘制方波U0的波形,测量其幅值和频率;将电位器RP调至中心位置,用示波器观察并绘制锯齿波U0的波形,记录;示波器基线调零,Ui输入1000HZ、幅值为2V的正弦信号,观察并记录Ui与U0波形,读出图中波形跳变时的Ui临界值;用万用表电位器RP调至预测结果位置,用示波器观察并描绘三角波输出U0及方波输出uo’,测其幅值、频率及Rp值,记录之。示波器基线调零,U输入1000HZ、幅值为2V的正弦信号,观察UI与U0波形。理论算法公式:当Ui

Welcome To My6n Blog 3937

Neo4j 版本选型与 Java 技术栈深度解析:Spring Data Neo4j vs Java Driver,如何抉择?

本文对比了Java生态中操作Neo4j图数据库的两大主流方案:Spring Data Neo4j(SDN)和Neo4j Java Driver。SDN适用于Spring Boot项目,提供对象映射和自动查询生成,开发效率高但性能稍逊;Java Driver则提供底层Cypher控制,灵活性高且性能优异,适合复杂查询和非Spring项目。文章给出版本选型建议(推荐Neo4j 5.x)、核心特性对比和混合使用策略,帮助开发者根据项目需求(如开发效率、性能要求、框架集成等)选择最合适的方案。

JIANqiao19931029的博客 1041

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring Data Neo4j 中文文档

Spring Data Neo4j 中文文档

weixin_45119331的博客 8101

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 后端也可以亲自使用IDEA调试angular代码
下一篇: Gitlab+Jenkins实现CICD
小饭大人
博客等级 码龄15年 23粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值