Neo4j 程序开发 JavaAPI 嵌入式开发模式(头歌)

文章目录

第1关:JavaAPI 嵌入式开发模式

任务描述

本关任务:使用 Java 创建一个新的 Neo4j 数据库,并且建立两个节点的关系。

相关知识

为了完成本关任务,你需要掌握:

  1. 创建 Neo4j 数据库;
  2. 启动 Neo4j 数据事务;
  3. 创建节点;
  4. 创建节点关系;
  5. 将创建的数据库设置为默认数据库。

创建 Neo4j 数据库

首先我们要知道所需要的 jar 包是那些。

前面的实训中,我们安装 Neo4j 时,有一个 lib 目录,该目录下的所有 jar 包,就是我们所需要的依赖。

依赖列表

在编译软件中编译时,需要先将依赖导入。

导入依赖

依赖导入后,我们就可以开始进行 Neo4j 的内嵌开发了。 创建 Neo4j 数据库的代码为:

java 复制代码
// 所需要的依赖为:
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.GraphDatabaseService;
import java.io.File;
// 创建工厂类
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
// 创建 Neo4j 数据库,
GraphDatabaseService db= dbFactory.newEmbeddedDatabase(new File("F:/TPNeo4jDB"));

源码解释: newEmbeddedDatabase(File):需要传入一个 File 类型的数据,为数据库的位置。 new GraphDatabaseFactory():创建一个图数据库工厂类。 dbFactory.newEmbeddedDatabase: 在指定的路径为我们创建一个 Schema / Database,如下所示。这类似于 Oracle SQL 的 CREATE DATABASE 命令。

启动 Neo4j 数据事务

启动Neo4j数据库事务以提交我们的更改:

java 复制代码
try (Transaction tx = graphDb.beginTx()) {
    // Perform DB operations                
    tx.success();
}

// Perform DB operations 到 tx.success(); 中间的区域写的是需要提交任务,如:创建节点、创建关系等,增删改查的内容。

创建节点

要创建节点,我们需要标签名称。 通过实现 Neo4j Java API Label 接口创建一个枚举。

创建接口:

java 复制代码
import org.neo4j.graphdb.Label;
public enum Tutorials implements Label {
    JAVA,SCALA,SQL,NEO4J;
}

创建节点并为其设置属性: 创建两个节点:

java 复制代码
Node javaNode = db.createNode(Tutorials.JAVA);
Node scalaNode = db.createNode(Tutorials.SCALA);

设置属性:

java 复制代码
javaNode.setProperty("TutorialID", "JAVA001");    
javaNode.setProperty("Title", "Learn Java");
scalaNode.setProperty("TutorialID", "SCALA001");
scalaNode.setProperty("Title", "Learn Scala");

创建节点关系

要创建关系,我们需要关系类型。 通过实现Neo4j"关系类型"创建枚举。

java 复制代码
import org.neo4j.graphdb.RelationshipType;
public enum TutorialRelationships implements RelationshipType{
    JVM_LANGIAGES,NON_JVM_LANGIAGES;
}

创建节点之间的关系并设置它的属性。 创建从 Java 节点到 Scala 节点的关系:

java 复制代码
Relationship relationship = javaNode.createRelationshipTo(scalaNode,
    TutorialRelationships.JVM_LANGIAGES);

将属性设置为此关系:

java 复制代码
relationship.setProperty("Id","1234");

注意: 除了两个枚举接口,其他的都需要放在事务中。

将创建的数据库设置为默认数据库

首先需要将创建得 Neo4j 数据库,移动到 Neo4j 安装目录下的 data/database目录下。

将配置文件中的 #dbms.active_database=graph.db 修改为所创建的 Neo4j 数据库的名称。

配置信息

启动 Neo4j 就可以看到我们创建的 Neo4j 数据库了。

可以查询看看我们刚刚创建的节点和关系:

节点查询

编程要求

根据提示,在右侧编辑器补充代码,

  1. 创建一个名字为:/root/neo4j_database/graph_1.db 的 Neo4j 数据库;

  2. 创建两个节点,节点属性和值为(第一行为字段名,后面两行分别为 Java 节点和 Scala 节点的属性值):

    java 复制代码
    TutorialID,Title,NoOfChapters,Status
    JAVA001,Learn Java,25,Completed
    SCALA001,Learn Scala,20,Completed

    节点标签和关系标签:

    java 复制代码
    NodeLabel:JAVA,SCALA
    RelationLabel:JVM_LANGIAGES

关系属性与值为:

java 复制代码
Id,OOPS,FP
1234,YES,YES
  1. 修改配置文件,更改默认 Neo4j 数据库。

测试说明

平台会对你编写的代码进行测试:

测试输入:无; 预期输出:

json 复制代码
Done successfully
p
(:JAVA {Status: "Completed", TutorialID: "JAVA001", Title: "Learn Java", NoOfChapters: "25"})-[:JVM_LANGIAGES {FP: "YES", Id: "1234", OOPS: "YES"}]->(:SCALA {Status: "Completed", TutorialID: "SCALA001", Title: "Learn Scala", NoOfChapters: "20"})

答案代码

修改配置文件,更改默认 Neo4j 数据库

sh 复制代码
vim /opt/neo4j-community-3.5.35/conf/neo4j.conf
# 将 graph.db 改为 graph_1.db

# 可以在 #dbms.active_database=graph.db 下面加一行 dbms.active_database=graph_1.db
# 快捷键 /dbm.a 就能搜索到,yy 复制一行, p 粘贴

代码文件

java 复制代码
package test_neo4j.neo4j.java.examples;

import java.io.File;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;

public class Neo4jJava {
	public static void main(String[] args) {
		//**************Begin************************* 
		// 创建工厂类
        GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
        
        // 创建 Neo4j 数据库,
        GraphDatabaseService db = dbFactory.newEmbeddedDatabase(new File("/root/neo4j_database/graph_1.db"));

		// 启动Neo4j数据库事务以提交我们的更改
		try (Transaction tx = db.beginTx()) {
            
            // 创建节点并为其设置属性
			Node javaNode = db.createNode(Tutorials.JAVA);
            Node scalaNode = db.createNode(Tutorials.SCALA);
            javaNode.setProperty("TutorialID", "JAVA001");    
            javaNode.setProperty("Title", "Learn Java");
            javaNode.setProperty("NoOfChapters", "25");
            javaNode.setProperty("Status", "Completed");
            scalaNode.setProperty("TutorialID", "SCALA001");
            scalaNode.setProperty("Title", "Learn Scala");
            scalaNode.setProperty("NoOfChapters", "20");
            scalaNode.setProperty("Status", "Completed");
			
			// 创建节点之间的关系并设置它的属性。
			// 创建从Java节点到Scala节点的关系
			Relationship relationship = javaNode.createRelationshipTo(scalaNode, TutorialRelationships.JVM_LANGIAGES);
            
			// 将属性设置为此关系
			relationship.setProperty("Id","1234");
            relationship.setProperty("OOPS","YES");
            relationship.setProperty("FP","YES");
            
            // Perform DB operations                
            tx.success();
            System.out.println("Done successfully");
        }
	}
    
	// 要创建节点,我们需要标签名称。 通过实现Neo4j Java API"Label"接口创建一个枚举。
    public enum Tutorials implements Label {
        JAVA,SCALA,SQL,NEO4J;
    }
    
	// 要创建关系,我们需要关系类型。 通过实现Neo4j"关系类型"创建枚举。
	public enum TutorialRelationships implements RelationshipType{
        JVM_LANGIAGES,NON_JVM_LANGIAGES;
    }
    //**************End*************************
}
相关推荐
微小的鱼7 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng7 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
若亦_7 小时前
Java中关于this的三种用法
java·开发语言·intellij-idea
山甫aa7 小时前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
软件技术NINI7 小时前
基于SpringBoot和Vue的博物馆预约平台管理系统的设计与实现
java·毕业设计·毕设
Android系统攻城狮8 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
独泪了无痕17 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南18 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
kingx319 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
Linux-lucky19 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu