使用Java操作Neo4j数据库的实现步骤

 更新时间:2025年09月07日 09:46:23   作者:南瓜呱呱  
本文主要介绍了Java项目连接到neo4j数据库,通过javaAPI实现了对neo4数据库的一系列操作并通过学习创建节点,节点之间的关系并进行查询操作和对节点的增删操作,感兴趣的可以了解一下

一、在windows平台上部署Neo4j数据库

首先要下载按照neo4j的软件包,因为neo4j的版本只有3.5版本和jdk1.8兼容,而neo4j 4.0版本需要jdk11版本才能成功运行

neo4j 3.5版本下载链接

安装好后到下载好的目录下

bin下面:执行

neo4j.bat console

此时已成功启动,在浏览器搜索框输入:http://localhost:7474/

即可成功进入,第一次进入用户名和密码均为neo4j,首次登录后再输入自己新设的密码

二、通过Neo4j的Java API编程,实现一系列操作

首先第一步当然还是 -- 创建Maven项目

项目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
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>neo4j-3.5-demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <neo4j.java.driver.version>1.7.5</neo4j.java.driver.version>
  </properties>

  <dependencies>
    <!-- Neo4j 3.5.x 官方驱动 -->
    <dependency>
      <groupId>org.neo4j.driver</groupId>
      <artifactId>neo4j-java-driver</artifactId>
      <version>${neo4j.java.driver.version}</version>
    </dependency>

    <!-- 日志依赖(Neo4j驱动需要) -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

接下来就是具体实现步骤:

(1)创建三个人物节点——人物名自取。

        //创建人物节点
        session.run("create(WR:Person{name:'WuRui'})");
        session.run("create(NC:Person{name:'xx'})");
        session.run("create(YU:Person{name:'cc'})");

(2)创建两个地区节点----地名自取。

        //创建地区节点
        session.run("create(HN:Location{name:'HuaiNan'})");
        session.run("create(AQ:Location{name:'AnQing'})");

(3)创建节点之间的关系:人与人之间的关系,人与地区之间的关系。

     (此处也可以在创建节点的时候就创建好关系)

        //创建关系
        session.run("match(WR:Person{name:'WuRui'}),(NC:Person{name:'xx'})"+
                "create(WR)-[:friend]->(NC)");
        session.run("match(WR:Person{name:'WuRui'}),(YU:Person{name:'cc'})"+
                "create(WR)-[:friend]->(YU)");
        //创建人与地区关系
        session.run("match(WR:Person{name:'WuRui'}),(AQ:Location{name:'AnQing'})"
        + "create(WR)-[:brith]->(AQ)");
        session.run("match(NC:Person{name:'xx'}),(HN:Location{name:'HuaiNan'})"
        + "create(NC)-[:brith]->(HN)");

刷新浏览器,效果如图:

(4)查询所有在淮南(地名可以随便写)出生的人物。

    //查询所有在淮南出生的人物
public void qhuai() {
    Q("match(p:Person)-[:brith]->(l:Location{name:'HuaiNan'}) " +
            "return p.name AS name");
}

(5)查询所有有关系的节点。

    //查询所有有关系的节点
public void qnodes() {
    Q("match (n)--() return distinct n");
}

(6)查询所有对外有关系的节点以及关系类型。

public void qr() {
    Q("match (n)-[r]->() return n.name as node,type(r) as type");
}

(7)增加一个人物节点的年龄属性,接着删除该属性。

    //增加并删除年龄属性
public void jiaage() {
      session.run("match(p:Person {name:'WuRui'}) " +
              "set p.age = 21");
}
public void jianage() {
    // 删除年龄
    session.run("match(p:Person {name:'WuRui'}) " +
            "remove p.age");
}

(8)删除图中的节点(方法不限)。

    //删除所有节点和关系
public void deleteAll() {
        Q("match (n) optional match (n)-[r]-() delete n,r");
    }

运行总代码:

package com.wurui.neo4j;
import org.neo4j.driver.v1.*;

public class Test_neo4j {
    private static Session session;
    private static Driver driver;
    static {
        driver = GraphDatabase.driver("bolt://localhost:7687",
                AuthTokens.basic("neo4j", "wr158158"));
        session = driver.session();
}
// 通用查询方法
public void Q(String c) {
    StatementResult result = session.run(c);
    System.out.println("\n执行结果:" + c);
    while (result.hasNext()) {
        System.out.println(result.next());
    }
}

public void see() { // 查看数据库neo4j
    StatementResult result = session.run("match (n) return n");
    while (result.hasNext()) {
        Record record = result.next();
        System.out.println(record);
    }
}
public void create() {
        //创建人物节点
        session.run("create(WR:Person{name:'WuRui'})");
        session.run("create(NC:Person{name:'xx'})");
        session.run("create(YU:Person{name:'cc'})");
        //创建地区节点
        session.run("create(HN:Location{name:'HuaiNan'})");
        session.run("create(AQ:Location{name:'AnQing'})");
        //创建关系
        session.run("match(WR:Person{name:'WuRui'}),(NC:Person{name:'xx'})"+
                "create(WR)-[:friend]->(NC)");
        session.run("match(WR:Person{name:'WuRui'}),(YU:Person{name:'cc'})"+
                "create(WR)-[:friend]->(YU)");
        //创建人与地区关系
        session.run("match(WR:Person{name:'WuRui'}),(AQ:Location{name:'AnQing'})"
        + "create(WR)-[:brith]->(AQ)");
        session.run("match(NC:Person{name:'xx'}),(HN:Location{name:'HuaiNan'})"
        + "create(NC)-[:brith]->(HN)");
}
    //查询所有在淮南出生的人物
public void qhuai() {
    Q("match(p:Person)-[:brith]->(l:Location{name:'HuaiNan'}) " +
            "return p.name AS name");
}
    //查询所有有关系的节点
public void qnodes() {
    Q("match (n)--() return distinct n");
}
    //查询所有有对外关系的节点及关系类型
public void qr() {
    Q("match (n)-[r]->() return n.name as node,type(r) as type");
}

    //增加并删除年龄属性
public void jiaage() {
      session.run("match(p:Person {name:'WuRui'}) " +
              "set p.age = 21");
}
public void jianage() {
    // 删除年龄
    session.run("match(p:Person {name:'WuRui'}) " +
            "remove p.age");
}
    //删除所有节点和关系
public void deleteAll() {
        Q("match (n) optional match (n)-[r]-() delete n,r");
    }

public static void main(String[] args){
    Test_neo4j test = new Test_neo4j();
    test.create();
    test.qhuai();
    test.qnodes();
    test.jiaage();
    test.jianage();
    test.deleteAll();
    test.qr();
    test.see();
    driver.close();
}}

小结

通过本次实验,我学会通过利用Java项目连接到neo4j数据库,通过javaAPI实现了对neo4数据库的一系列操作。通过学习创建节点,节点之间的关系并进行查询操作和对节点的增删操作,加深了我对neo4j数据库操作命令的理解,也提高了Java编程能力和neo4j数据库的应用技能。

到此这篇关于使用Java操作Neo4j数据库的实现步骤的文章就介绍到这了,更多相关Java操作Neo4内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中基于Java的配置@Configuration和@Bean用法详解

    Spring中基于Java的配置@Configuration和@Bean用法详解

    这篇文章主要介绍了Spring中基于Java的配置@Configuration和@Bean用法详解,Spring中为了减少xml中配置,可以声明一个配置类(例如SpringConfig)来对bean进行配置。,需要的朋友可以参考下
    2019-06-06
  • Java字符串原理分析之String是否可变

    Java字符串原理分析之String是否可变

    当我们在求职时,面试官很喜欢问我们关于String的一些原理性知识,比如String的不可变性、字符串的内存分配等,为了让大家更好地应对面试,并理解String的底层设计,接下来会给大家聊聊String的一些原理,比如String为什么具有不可变性,需要的朋友可以参考下
    2023-05-05
  • 详解Struts2标签遍历

    详解Struts2标签遍历

    这篇文章主要介绍了Struts2标签遍历,以及相关的用法示例,需要的朋友可以参考下。
    2017-09-09
  • navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法

    navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法

    今天小编就为大家分享一篇关于navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java 继承和多态的作用及好处

    Java 继承和多态的作用及好处

    文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度,感兴趣的朋友一起看看吧
    2025-06-06
  • 如何用Java注解和反射实现依赖注入

    如何用Java注解和反射实现依赖注入

    这篇文章主要介绍了如何用Java注解和反射实现依赖注入,对依赖注入感兴趣的同学,可以实验一下
    2021-05-05
  • 解读什么是构造方法?能否被重写或重载?

    解读什么是构造方法?能否被重写或重载?

    这篇文章主要介绍了什么是构造方法?能否被重写或重载问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java 反射机制知识详细介绍及总结

    Java 反射机制知识详细介绍及总结

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
    2017-01-01
  • SpringBoot详细讲解如何创建及刷新Spring容器bean

    SpringBoot详细讲解如何创建及刷新Spring容器bean

    前面看spring源码时可以发现refresh()方法十分重要。在这个方法中会加载beanDefinition,同时创建bean对象。那么在springboot中有没有使用这个refresh()方法呢
    2022-06-06
  • Mybatis中使用万能的Map传参实现

    Mybatis中使用万能的Map传参实现

    在编程中,有可能遇到我们的实体类或者数据库中表的字段或参数过多的情况,那这时候用Map传参是比较理想的选择,本文就详细的介绍一下如何使用,感兴趣的可以了解下
    2021-07-07

最新评论