springboot集成neo4j

【Springboot集成Neo4j完整版教程】 【Springboot集成Neo4j完整版教程】本文展示了如何使用Neo4J和Spring Boot整合,如何在Spring Boot应用程序中使用Neo4J数据库来持久化数据、使用CQL语言进行高效的查询操作,并提供了一个非常简单的例子以演示如何使用Neo4J数据库。相信通过本文的学习,读者已经掌握了如何使用Neo4J和Spring Boot整合,并且具备将此应用于实际项目的能力。 阅读详情

1.NEO4J简介

NEO4J,NoSql家族中的一员,最早发行的图形数据库,目前依然是主流图形数据库。优点是:图论的数据库实现,对各种图算法做了简易封装,使开发者不再关注于算法的具体实现,可以集中精力于业务的实现。采用java编写,社区版开源,企业版闭源。

2.传统关系型数据库与图形数据库的纠葛

上世纪软硬件的限制使oracle\mysql等一大批数据库应运而生,建立在集合论基础上实现的数据库,通过外键理论在实际上勉强完成了简单的关系。而最早的NEO4J等图形数据库还在开发者的肚子里,关系型数据库之名就这样被抢走了。

3.怎么把neo4j怎么集成到我们的程序中?

场景:A同学被老大安排开发一个关于社交关系的需求,根据A同学多年的开发经验,mysql是肯定做不了的(因为关系型数据库的数学基础是集合论,依靠外键来实现简单的关系,对于深层关系的查询递归将会慢到一个让人无法接受的程度)。百度一下,NEO4J——以图论为基础的数据库,就它了。开始百度怎么往项目中集成NEO4J,A同学发现一个看上去不错的demo,这么多人转发and不要脸的抄袭,应该不错,上去鼓捣一阵,最后发现:咦?怎么报错了,一模一样的啊;卧槽,这锤子不发maven依赖,版本用的不对啊......几小时就这么浪费了,还打击了自己的信心。

引入的方法有很多种,但是spring提供的办法绝对是最简单方便的。怎么看?当然是看官网提供的15min的案例,地址:https://spring.io/guides/gs/accessing-data-neo4j/。怎么找,看下面的截图。

4.集成步骤截图:

前置条件

1.电脑已正确安装maven、jdk、Eclipse|IDEA

(1)下载neo4j的window解压包。地址:https://neo4j.com/,下载下来的解压包如下:

(2)配置NEO4J_HOME的环境变量。

(3)安装neo4J的服务

cmd命令:

1.neo4j install-service

2.neo4j start

假如neo4j服务安装失败,也可以用以下命令启动:

neo4j.bat console

查看http://localhost:7474/browser/,账号和密码都是:neo4j,然后修改密码,进入如下页面:

(4)springboot集成neo4j,对比官网demo,下面就放我自己的代码上来:

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>neo4j</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>neo4j</name>
    <description>Demo project for Spring neo4j</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.application.properties

spring.data.neo4j.uri=bolt://localhost:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=neo4j

3.Person实体类

package com.example.neo4j.entity;

import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;

@NodeEntity
public class Person {

    @Id @GeneratedValue private Long id;

    private String name;

    private Person() {
        // Empty constructor required as of Neo4j API 2.0.5
    };

    public Person(String name) {
        this.name = name;
    }

    /**
     * Neo4j doesn't REALLY have bi-directional relationships. It just means when querying
     * to ignore the direction of the relationship.
     * https://dzone.com/articles/modelling-data-neo4j
     */
    @Relationship(type = "TEAMMATE", direction = Relationship.UNDIRECTED)
    public Set<Person> teammates;

    public void worksWith(Person person) {
        if (teammates == null) {
            teammates = new HashSet<>();
        }
        teammates.add(person);
    }

    public String toString() {

        return this.name + "'s teammates => "
                + Optional.ofNullable(this.teammates).orElse(
                Collections.emptySet()).stream()
                .map(Person::getName)
                .collect(Collectors.toList());
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4.dao层调用neo4j,jpa的方式:

package com.example.neo4j.repository;

import java.util.List;

import com.example.neo4j.entity.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;

public interface PersonRepository extends Neo4jRepository<Person, Long> {

    Person findByName(String name);

    List<Person> findByTeammatesName(String name);

    @Query(value = "match (Greg:Person) return Greg",
            countQuery= "match (Greg:Person) return count(Greg)")
    Page<Person> getActorsThatActInAmoviesFromTitle( Pageable pageable );

    @Query(value ="",countQuery = "")
    List<Person> getAllById();
}

5.springboot启动类

package com.example.neo4j;

import com.example.neo4j.entity.Person;
import com.example.neo4j.repository.PersonRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;

import java.util.Arrays;
import java.util.List;


@SpringBootApplication
@EnableNeo4jRepositories
public class Neo4jApplication {

    private final static Logger log = LoggerFactory.getLogger(Neo4jApplication.class);


    public static void main(String[] args) {
        SpringApplication.run(Neo4jApplication.class, args);
        System.exit(0);
    }

    @Bean
    CommandLineRunner demo(PersonRepository personRepository) {
        return args -> {

            personRepository.deleteAll();

            Person greg = new Person("Greg");
            Person roy = new Person("Roy");
            Person craig = new Person("Craig");

            List<Person> team = Arrays.asList(greg, roy, craig);

            log.info("Before linking up with Neo4j...");

            team.stream().forEach(person -> log.info("\t" + person.toString()));

            personRepository.save(greg);
            personRepository.save(roy);
            personRepository.save(craig);

            greg = personRepository.findByName(greg.getName());
            greg.worksWith(roy);
            greg.worksWith(craig);
            personRepository.save(greg);

            roy = personRepository.findByName(roy.getName());
            roy.worksWith(craig);
            // We already know that roy works with greg
            personRepository.save(roy);

            // We already know craig works with roy and greg

            log.info("Lookup each person by name...");
            team.stream().forEach(person -> log.info(
                    "\t" + personRepository.findByName(person.getName()).toString()));

            List<Person> teammates = personRepository.findByTeammatesName(greg.getName());
            log.info("The following have Greg as a teammate...");
            teammates.stream().forEach(person -> log.info("\t" + person.getName()));
            Page<Person> grag=personRepository.getActorsThatActInAmoviesFromTitle(PageRequest.of(0,5));
            log.info("\t" + grag);
        };
    }

}

6.启动截图

7.在neo4j控制台查询结果:

 

SpringBoot集成neo4j示例 文章目录SpringBoot集成neo4j配置测试neo4j cypher常用语法创建创建node创建relationship查询1.查询节点2.查询两个节点的关系3.限制路径查询条件删除补充1.MATCH与OPTIONAL MATCH的区别2.常用的relationship函数 SpringBoot集成neo4j 配置 xml配置: <dependency> <gr... 阅读详情

相关推荐

springboot集成Neo4j,代码示例

写在前面 本文基于 Docker 搭建 Neo4J服务,提供web管理页面 详细搭建过程,可参考这里 Neo4J示例练习 更多学习,可官网自行学习,官网 一、项目搭建 Maven 工程 1.1、pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

诗和远方,任重道远 2191

Springboot集成Neo4j

Neo4j:图数据库是以图结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据。 正如RDBMS以表的“行,列”的形式存储数据,GDBMS以图的形式存储数据。

喝醉的咕咕鸟 1万+

springBoot集成neo4j实现查询节点

springBoot+neo4j的文件目录 导入pom.xml依赖 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-neo4j</artifactId> &lt...

chenfangsong的博客 5724

SpringBoot 整合 Neo4j

SpringBoot 整合 Neo4j

m0_37935175的博客 1万+

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

springboot整合neo4j使用详解

congge_study的博客 7625

【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍

Spring Boot 提供了对 Neo4j 的良好支持,使得开发者可以更方便地使用图数据库。通过使用 Spring Data Neo4j,开发者可以轻松地进行数据访问、操作以及管理。本文将详细介绍如何在 Spring Boot 应用中集成 Neo4j,包括基本配置、实体定义、数据访问层的实现以及使用示例。

颜淡慕潇 1万+

SpringBoot集成neo4j实战

文章目录1.图数据库Neo4j介绍1.1 什么是图数据库(graph database)1.2 为什么需要图数据库1.3 Neo4j特点和优势Neo4j的特点Neo4j的优点1.4 Neo4j - 数据模型2.安装Neo4j3.Neo4j常用sql语句4.SpringBoot集成neo4j4.1 添加依赖4.2 在application.properties中配置连接信息5.实战5.1 新增实体类5.2 新建持久化类(PersonRepository)5.3 测试新增删除修改查询建立联系 1.图数据库Neo

zhiyikeji的博客 7673

2026年AI技能进阶指南:从提示词工程到智能体开发实战

提示词工程作为AI时代的基础沟通技能,其核心原理是通过系统化的交互方法论实现与大模型的高效对话。这项技术通过明确性、具体性和可操作性的设计原则,显著提升了AI生成内容的质量和实用性。在工程实践层面,提示词工程已经发展出角色扮演、步骤分解等成熟模式,广泛应用于代码生成、技术方案设计等场景。随着AI智能体开发的兴起,提示词工程进一步演化为定义智能体身份认知和行为规范的系统接口设计,成为构建自主AI系统的关键技术基础。掌握从基础提示词到智能体开发的完整技能栈,能够帮助开发者在AI技术浪潮中保持核心竞争力。

weixin_33139275的博客 333

Springboot 集成Neo4j完整版

前言 正文 总结

全力奔跑,梦在彼岸 3万+

Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!

Yersinia是一个专为执行二层网络攻击设计的框架,利用多种网络协议的弱点进行渗透测试和网络分析。它支持针对生成树协议(STP)、思科发现协议(CDP)、动态中继协议(DTP)、动态主机配置协议(DHCP)、热备用路由器协议(HSRP)、802.1q、802.1x、交换机间链路协议(ISL)和VLAN中继协议(VTP)的攻击。这些攻击可能导致网络中的拒绝服务(DoS)或为更复杂的攻击创造条件。Yersinia对渗透测试人员和网络管理员非常有用,但使用时需谨慎,以免造成网络不稳定。

qq_24305079的博客 2281

深入解析SOC芯片设计中DFT OCC与ATPG的协同优化策略

本文深入探讨了在复杂SOC芯片设计中,DFT(可测试性设计)的核心组件OCC(片上时钟控制器)与ATPG(自动测试向量生成)的协同优化策略。文章从基本原理出发,分析了OCC作为测试时钟管理者的关键作用,以及ATPG作为故障检测引擎的工作机制,并重点阐述了二者在测试架构选择、参数对齐、低功耗测试等场景下的协同方法与实战技巧,旨在实现更高的测试覆盖率与更低的测试成本。

efc123456的博客 1035

【Neo4j权威指南】SpringBoot 集成 Neo4j 教程SDN

【Neo4j权威指南】SpringBoot 集成 Neo4j 教程SDN一、Neo4j 介绍二、Neo4j 安装三、SpringBoot 整合四、整合测试五、结果验证六、过程中遇到的问题记录 一、Neo4j 介绍 Neo4j 采用 JAVA 语言开发,是一个高性能的图形数据库,NOSQL 中的一种,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。 二、Neo4j 安装 单机版的 Neo4j 安装简单,从官网下载安装包,在 conf 目录下找到 ne

写Bug的小白的博客 1万+

A-Level CS 计算机科学 考试知识点——考试介绍&第1章

前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若需要A-Level CS 计算机科学考试辅导也可以私信我。 目录 关于A-Level CS 计算机科学考试 考试简介 考试内容 考试时间 评分情况 第1章 信息表示 本章学习内容 1.01 数字系统 1.02 数字的内部编码 整数编码(Coding for integers) 二进制编码的十进制(Binary coded decimal——BCD) 1.03.

王俊的博客 6458

springboot 简单集成neo4j 实现基础图谱的 CURD能力

文章目录一、Neo4j 的安装与配置1、安装JDK2、安装Neo4j3、Neo4j环境变量配置4、启动服务器二、Neo4j 使用教程一、Neo4j 的安装与配置1、安装JDK由于Neo4j是基于Java的图形数据库,运行Neo4j需要启动JVM进程,因此必须安装JAVA SE的JDK。通过上文搭建的neo4j 服务,是一个空数据库,这个数据库有单独的cql语法,去执行一些操作,针对存储的数据,其实就是通过固定的 节点和关系 两个概念,去自定义想要的数据信息。:基于 Neo4j OGM,需要配置。

qq_43893881的博客 1396

最新小旋风蜘蛛池X6.21解密版+绕过授权带教程

介绍: 1.站群管理:用你的域名在这里添加网站 2.站点优化:站点互链,内容优化 2.系统设置:开启蜘蛛池 3.采集管理(可开启自动采集) 4.缓存设置:推荐开启tkd缓存 其他的用户根据自己的实际情况后台进行配置,通常以下: 1.后台首页(这里显示系统的大致概况) 2.系统设置:蜘蛛池的基本设置(访问开关、跳转、统计等等) 3.站群管理: 1.网站管理(用你的域名在这里添加网站) 2.模型管理(可构建不同类型站点:电影、文章、论坛等等) 3.TKDB调用模板(即:title、keywords、descri

百度SEO程序下载 2937

MicroLogix1400编程(使用RSLogix 500 + RSLinx Classic Lite)

MicroLogix1400编程

noscallion的博客 1万+

Springboot集成NEO4J

Springboot集成NEO4J

书读百遍,其义自见 1818

从原理到落地:Java+TensorRT打造YOLO模型GPU极致推理方案

Java+TensorRT的YOLO模型GPU加速方案,核心是通过JNI桥接实现Java与TensorRT的高效交互,结合TensorRT的底层优化能力,最大化GPU算力。该方案既保留了Java后端的工程化优势(如易维护、生态完善),又解决了AI模型推理的性能瓶颈,可落地于实时视频分析、智能监控、工业质检等场景。基于TensorRT Dynamic Shape实现多尺寸输入的自适应优化;结合Java的协程(Virtual Thread)提升异步推理的并发效率;

2601_94871597的博客 766

Springboot上同时集成mysql和Neo4j

Springboot上同时集成mysql和Neo4j 一、集成mysql 1.1 在pom.xml配置文件里面添加如下仓库地址: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artif...

摆渡人一直都在 2847

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5102

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

spring boot 集成图形数据库Neo4j

一、安装Neo4j图数据库我下载的是免安装zip版本的 1、解压ZIP包数据 2、配置环境变量 创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。win10系统环境变量设置步骤NEO4J_HOME = F:\neo4j- community-3.4.0 -- 根据自己的具体情况、Path = %NEO4J_HOME%\bin 3、验证N...

开发小盆友的博客 1224

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 统计pdf文章单词出现频率
下一篇: TF_TDF文本比较相似度算法
猿人换羽
博客等级 码龄10年 72粉丝 24原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值