图数据库 Neo4j 学习之JAVA-API操作

news2024/10/7 15:24:00

Neo4j 系列

1、图数据库 Neo4j 学习随笔之基础认识
2、图数据库 Neo4j 学习随笔之核心内容
3、图数据库 Neo4j 学习随笔之基础操作
4、图数据库 Neo4j 学习随笔之高级操作
5、图数据库 Neo4j 学习之JAVA-API操作
6、图数据库 Neo4j 学习之SpringBoot整合


文章目录

  • Neo4j 系列
  • 前言
  • 一、JAVA Driver版本选择
  • 二、获取链接
  • 三、增删改查操作
    • 3.1、新增节点和关系
      • 3.1.1 新增节点
      • 3.1.2 新增关系
    • 3.2、删除节点和关系
      • 3.2.1 删除关系
      • 3.2.2 删除节点
    • 3.3、修改节点和关系
      • 3.3.1 修改关系
      • 3.3.2 修改节点
    • 3.4、查询节点和关系
      • 3.4.1 查询节点
      • 3.4.2 查询关系
  • 4、总结


前言

前面讲了Neo4j和核心概念以及基本的增删改查以及高级操作,但项目里面主要还是要靠后端来获取数据提供到前端展示,那就避免不了通过开发语言来连接Neo4j来操作,本人一个纯纯的JAVA攻城狮,则用JAVA来进行操作。

一、JAVA Driver版本选择

随着Neo4j不断的版本迭代,目前官网公布最新的已经是 5.X 了,那么相应的 JAVA Driver 的版本也要随着变化,具体版本对于看下面截图。
最新的版本是 5.x 的,不过相对应的 Java 的版本也要 17 的,一般不用最新的,所以本文以 4.4 为准,这样 Java 8 或者 11 就可以了。

Driver对应关系
码云地址快速通道

项目中依旧是用 Maven 来管理项目,引入 java driver 驱动包。

<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>4.0.0</version>
</dependency>

二、获取链接

和 MySQL 、SQL Server 数据库类似,JAVA 驱动提供了获取链接的方法。

/**
 * @param uri
 * @param username
 * @param password
 * @return 获取Neo4j链接
 */
private static Session getSession(String uri, String username, String password){
    Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(username, password));
    Session session = driver.session();
    if(session.isOpen()){
        System.out.println("连接Neo4j成功!" + session);
        return session;
    }else{
        System.out.println("连接Neo4j失败!");
    }
    return null;
}

执行结果:
连接Neo4j测试

三、增删改查操作

3.1、新增节点和关系

3.1.1 新增节点

主要还是用原生的方式,构建一个 Query 对象,发送 Create Node 语句。

private static void createNode(String... values){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)){
        Session session = driver.session();
        for (String value : values) {
            Query query = new Query("create (n:loveperson) set n.name = $name return id(n)", Values.parameters("name", value));
            Result result = session.run(query);
            int id = result.single().get(0).asInt();
            System.out.println(id);
        }
        session.close();
    }
    driver.close();
}

使用main() 方法创建节点,成功输出 152,153 两个id,说明创建节点成功,下面查询来验证一下有没有 id = 153 的节点。

在这里插入图片描述

3.1.2 新增关系

还是发送创建关系语句。

private static void createLink(int id1, int id2){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)) {
        Session session = driver.session();
        Query query = new Query("match (n:loveperson),(m:loveperson) where id(n)=$id1 and id(m)=$id2\n" +
                "create (n)-[rel:`夫妻`]->(m) return rel", Values.parameters("id1", id1, "id2", id2));
        Result result = session.run(query);
        String s = result.single().get(0).asRelationship().toString();
        System.out.println(s);
        session.close();
    }
    driver.close();
}

3.2、删除节点和关系

3.2.1 删除关系

删除关系,为啥要先删除关系呢,因为如果先不删除关系,节点是无法删除的,就行 MySQL 关联了外键,那么这条记录也是不能删除的。

private static void deleteLink(int id){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)) {
        Session session = driver.session();
        Query query = new Query("match (n:loveperson)-[rel]->(m:loveperson) where id(rel)=$id delete rel", Values.parameters("id", id));
        session.run(query);
        session.close();
    }
    driver.close();
}

3.2.2 删除节点

private static void deleteNode(int id){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)) {
        Session session = driver.session();
        Query query = new Query("match (n:loveperson) where id(n)=$id delete n", Values.parameters("id", id));
        session.run(query);
        session.close();
    }
    driver.close();
}

3.3、修改节点和关系

3.3.1 修改关系

修改关系是删除掉原来的关系,刘大脑袋碰到一个知己,动心了,所以背叛大脸盘子王云了,他们断了原来的夫妻关系,建立了背叛关系。

private static void updateLink(int id){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)) {
        Session session = driver.session();
        Query query = new Query("match (n:loveperson)-[rel]->(m:loveperson) where id(rel)=$id\n" +
                "create (n)-[r:背叛]->(m)\n" +
                "delete rel\n" +
                "return type(r)", Values.parameters("id", id));
        Result result = session.run(query);
        String s = result.single().get(0).toString();
        System.out.println(s);
        session.close();
    }
    driver.close();
}

3.3.2 修改节点

自从刘大脑袋背叛了王云以后,王云的爱好就是对人心已死。

private static void updateNode(int id){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    if(Objects.nonNull(driver)) {
        Session session = driver.session();
        Query query = new Query("match (n:loveperson) where id(n)=$id set n.hobby = '心已死' return n", Values.parameters("id", id));
        Result result = session.run(query);
        String s = result.single().get(0).asNode().get("name").asString();
        System.out.println(s);
        session.close();
    }
    driver.close();
}

3.4、查询节点和关系

3.4.1 查询节点

private static void createNode(String... values){
Driver driver = getDriver(URI, USERANME, PASSWORD);
 if(Objects.nonNull(driver)){
     Session session = driver.session();
     for (String value : values) {
         Query query = new Query("create (n:loveperson) set n.name = $name return id(n)", Values.parameters("name", value));
         Result result = session.run(query);
         int id = result.single().get(0).asInt();
         System.out.println(id);
     }
     session.close();
 }
 driver.close();
}

3.4.2 查询关系

private static void queryLink(){
    Driver driver = getDriver(URI, USERANME, PASSWORD);
    Session session = driver.session();
    if(Objects.nonNull(session)){
        Query query = new Query("match (n:loveperson)-[rel]->(m:loveperson) return rel");
        List<String> list = session.beginTransaction().run(query).list(record -> {
            return record.get(0).asRelationship().type();
        });
        list.forEach(System.out::println);
        session.close();
        driver.close();
    }
}

4、总结

其实还要学会了基本的操作,那么Java连接也就很简单了,Java Driver只是一个辅助的操作工具而已,也没有什么技术含量了感觉,就是简单的增删改查,不过看着例子倒是写起来块了很多。
不过使用简单的Java API 还是比较容易的,真正的开发中没人愿意这样写,因为 Spring Data 还是整合了 Neo4j 的操作的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80575.html

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

相关文章

mac pro M1(ARM)安装vmware虚拟机及centos8详细教程

前言 mac发布了m1芯片&#xff0c;其强悍的性能收到很多开发者的追捧&#xff0c;但是也因为其架构的更换&#xff0c;导致很多软件或环境的安装成了问题&#xff0c;这次我们接着来看如何在mac m1环境下安装centos8 Centos8安装安装vmware虚拟机Centos8 镜像支持M1芯片安装Cen…

DDPM原理与代码剖析

前言 鸽了好久没更了&#xff0c;主要是刚入学学业压力还蛮大&#xff0c;挺忙的&#xff0c;没时间总结啥东西。 接下来就要好好搞科研啦。先来学习一篇diffusion的经典之作Denoising Diffusion Probabilistic Models(DDPM)。 先不断前向加高斯噪声&#xff0c;这一步骤称为…

论文笔记(二十三):Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo

Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo文章概括摘要1. 介绍2. 背景3. MuJoCo MPC (MJPC)3.1. 物理模拟3.2. 目标3.3. 样条3.4. 规划师4. 结论4.1. 图形用户界面4.2. 例子5. 讨论5.1. 预测抽样5.2. 用例5.3. 局限和未来的工作文章概括 作者&#xff…

25-Vue之ECharts-基本使用

ECharts-基本使用前言ECharts介绍ECharts快速上手ECharts配置说明前言 本篇开始来学习下开源可视化库ECharts ECharts介绍 ECharts是百度公司开源的一个使用 JavaScript 实现的开源可视化库&#xff0c;兼容性强&#xff0c;底层依赖矢量图形 库 ZRender &#xff0c;提供直…

Oracle High Water Mark问题

公司写SQL时遇到一个奇怪的问题&#xff0c;往表中频繁插入和删除大量数据&#xff0c;几次操作后&#xff0c;使用Select查询(表中没数据)特别慢&#xff0c;后得知是高水位线的问题。 该问题已通过: truncate table tableName语句解决。 本想写篇文章详细记录一下的&#xff…

操作系统,计算机网络,数据库刷题笔记9

操作系统&#xff0c;计算机网络&#xff0c;数据库刷题笔记9 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff…

聊聊远程项目交付的敏捷管理

这是鼎叔的第四十三篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本人专栏和微信公众号《敏捷测试转型》&#xff0c;大量原创思考文章陆续推出。 对于日益重要的国际化市场&#xff0c;越来越多的离岸项目&#xff08;内包或外包&#xff09;在…

这十套练习,教你如何用Pandas做数据分析(09)

练习9-时间序列 探索Apple公司股价数据 步骤1 导入必要的库 运行以下代码 import pandas as pd import numpy as np visualization import matplotlib.pyplot as plt %matplotlib inline 步骤2 数据集地址 运行以下代码 path9 ‘…/input/pandas_exercise/pandas_exer…

CVE-2019-11043(PHP远程代码执行漏洞)复现

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是CVE-2019-11043&#xff08;PHP远程代码执行漏洞&#xff09;复现。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&am…

【hexo系列】02.hexo和obsidian实现笔记丝滑

文章目录hexo主题hexo进阶hexo插件&#xff1a;自动生成目录hexo插件&#xff1a;自动生成目录序号&#xff08;自行选用&#xff09;obsidian插件&#xff1a;templater安装插件配置插件定制模板新建笔记参考资料hexo主题 hexo主题大全 cd blog git clone https://github.co…

这十套练习,教你如何用Pandas做数据分析(08)

练习8-创建数据框 探索Pokemon数据 步骤1 导入必要的库 运行以下代码 import pandas as pd 步骤2 创建一个数据字典 运行以下代码 raw_data {“name”: [‘Bulbasaur’, ‘Charmander’,‘Squirtle’,‘Caterpie’], “evolution”: [‘Ivysaur’,‘Charmeleon’,‘Warto…

链接的接口——符号

链接的接口——符号 链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起&#xff0c;或者说像玩具积木一样&#xff0c;可以拼装形成一个整体。为了使不同目标文件之间能够相互粘合&#xff0c;这些目标文件之间必须有固定的规则才行&#xff0c;就像积木模块必须…

Akka 学习(八)路由与Dispatcher

目录一 编发编程二 Actor路由2.1 路由的作用2.2 路由的创建方式2.3 路由策略2.4 广播消息2.5 监督路由对象2.6 Akka 案例三 Dispatcher 任务分发3.1 什么是Dispatcher&#xff1f;3.2 Dispatcher的线程池3.3 Dispatcher的分类一 编发编程 Akka 是一个用于实现分布式、并发、响…

mPEG-Phosphate,甲氧基-聚乙二醇-磷酸盐试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;mPEG-Phosphate 中文&#xff1a;甲氧基-聚乙二醇-磷酸盐 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Phosphate PEG Methoxy PE 4、分子量&#xff1a;可定制&#xff0c;2000/1000/3400/20000/5000/10000 5、…

认识Java中的反射与枚举

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaSE基础 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 反射 什么是反射&#xff1f; 常用的反射类 Class类 Class类中的相关方法 常用获得类中属性相关的方法 获得类中注解相关的方法 获得…

Java中的运算符--短路运算

文章目录0 写在前面1 介绍2 举例2.1 逻辑与 &&2.2 逻辑或 ||3 小技巧4 写在最后0 写在前面 JAVA中有两个短路运算&#xff0c;一个是短路与&#xff0c;一个是短路或。 所谓短路&#xff0c;就是当一个参与运算的操作数足以推断该表达式的值时&#xff0c;另一个操作数…

VirtualBox安装CentOS7

一&#xff1a;、下载CentOS7的镜像 下载地址&#xff1a;Downloadhttps://www.centos.org/download/ 进入后有三个版本可以选择&#xff1a; 1、DVD ISO 标准安装版&#xff0c;一般下载这个就可以了&#xff08;推荐&#xff09;本文以此为例&#xff01; 2、Everything…

2023跨年代码(烟花+雪花)

一眨眼&#xff0c;马上就2023年了&#xff0c;祝大家在新的一年里&#xff1a;身体健康平安&#xff0c;生活充实饱满&#xff0c;事业步步高升&#xff0c;心情阳光灿烂&#xff0c;财运滚滚而来&#xff0c;家庭美满幸福&#xff0c;新年开心快乐! 本文将给大家分享一些跨年…

GitHub Copilot

介绍 GitHub Copilot 是人工智能编程助手&#xff0c;它可以帮助你编写程序。在你用visual studio或visual studio code等软件设计工具进行编程时&#xff0c;它可以直接给你整行或整个方法的代码提示&#xff0c;并且提供多种提示方案供你选择。他是由openai公司&#xff08;马…

docker 及docker-compose network概念及操作详解

1. docker network概述 Docker通过使用网络驱动程序【network drivers】支持网络容器。默认情况下&#xff0c;Docker提供了多个网络驱动程序&#xff0c;如bridge 和overlay驱动程序。用户也可以自己写一个网络驱动插件&#xff0c;这样就可以创建自己的驱动程序。 Docker引…