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

文章目录

  • 第1关:JavaAPI 嵌入式开发模式
    • 任务描述
    • 相关知识
      • 创建 Neo4j 数据库
      • 启动 Neo4j 数据事务
      • 创建节点
      • 创建节点关系
      • 将创建的数据库设置为默认数据库
    • 编程要求
    • 测试说明
    • 答案代码
      • 修改配置文件,更改默认 Neo4j 数据库
      • 代码文件

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

任务描述

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

相关知识

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

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

创建 Neo4j 数据库

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

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

img

依赖列表

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

img

导入依赖

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

// 所需要的依赖为:
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数据库事务以提交我们的更改:

try (Transaction tx = graphDb.beginTx()) {
    // Perform DB operations                
    tx.success();
}

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

创建节点

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

创建接口:

import org.neo4j.graphdb.Label;
public enum Tutorials implements Label {
    JAVA,SCALA,SQL,NEO4J;
}

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

Node javaNode = db.createNode(Tutorials.JAVA);
Node scalaNode = db.createNode(Tutorials.SCALA);

设置属性:

javaNode.setProperty("TutorialID", "JAVA001");    
javaNode.setProperty("Title", "Learn Java");
scalaNode.setProperty("TutorialID", "SCALA001");
scalaNode.setProperty("Title", "Learn Scala");

创建节点关系

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

import org.neo4j.graphdb.RelationshipType;
public enum TutorialRelationships implements RelationshipType{
    JVM_LANGIAGES,NON_JVM_LANGIAGES;
}

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

Relationship relationship = javaNode.createRelationshipTo(scalaNode,
    TutorialRelationships.JVM_LANGIAGES);

将属性设置为此关系:

relationship.setProperty("Id","1234");

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

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

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

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

img

配置信息

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

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

img

节点查询

编程要求

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

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

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

    TutorialID,Title,NoOfChapters,Status
    JAVA001,Learn Java,25,Completed
    SCALA001,Learn Scala,20,Completed
    

    节点标签和关系标签:

    NodeLabelJAVASCALA
    RelationLabelJVM_LANGIAGES
    

关系属性与值为:

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

测试说明

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

测试输入:; 预期输出:

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 数据库

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 粘贴

代码文件

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*************************
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123

【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)

2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024) 2024 International Conference on Biological Neuroengineering and Health Big Data(ICBNHBD) 一、【会议简介】 2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)&#xff0c;这场科学盛宴&#xff0c;会议在中…

开关电源工作时,如何抑制纹波和减小高频噪声?

开关电源的纹波和噪声是一个本质问题&#xff0c;换而言之无论纹波和噪声多么小&#xff0c;也无法从根本上去除&#xff0c;再绝对的讲开关电源无论成本怎么提高&#xff0c;也无法完全达到线性电源的性能和特点。那么&#xff0c;通常抑制或减少它的做法有五种&#xff1a; …

2分图匹配算法

定义 节点u直接无边&#xff0c;v之间无边&#xff0c;边只存在uv之间。判断方法&#xff1a;BFS染色法&#xff0c;全部染色后&#xff0c;相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min&#xff08;u&#xff0c; v&#xff09;。贪心算法可能导致&…

OLED双面显示广告机的应用场景

OLED双面显示广告机是一种创新的广告设备&#xff0c;它具有双面显示屏幕&#xff0c;可以同时向两个方向展示广告或信息。这种设备被广泛应用于各种场景&#xff0c;例如&#xff1a; 商业展示&#xff1a;在大型商业场所&#xff0c;如购物中心、百货商场等&#xff0c;OLED双…

WPS导出的PDF比较糊,和原始的不太一样,将带有SVG的文档输出为PDF

一、在WPS的PPT中 你直接输出PDF可能会导致一些问题&#xff08;比如照片比原来糊&#xff09;/ 或者你复制PPT中的图片到AI中类似的操作&#xff0c;得到的照片比原来糊&#xff0c;所以应该选择打印-->高级打印 然后再另存为PDF 最后再使用AI打开PDF文件再复制到你想用…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

webpack优化打包速度

webpack打包速度太慢 优化 1.多线程打包 js压缩和loader 2.优化启动速度 hard-source-webpack-plugin 3.删除无用的 分析类插件 4.DllPlugin通道打包 1.webpack多线程打包 loader loader 使用 thread-loader 将他放置你要使用的loader前面就行&#xff0c;不过这个lorder例如s…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《参与电网削峰调节的电动重卡换电站调度策略》

标题"参与电网削峰调节的电动重卡换电站调度策略"表明这是一个关于电动重型卡车和电网协同运营的主题。下面对标题中的关键术语进行解读&#xff1a; 电动重卡&#xff1a; 指的是使用电力驱动而不是传统燃油的重型卡车&#xff0c;通常是指货运卡车。电动卡车的使用…

封装flutter webview页面

例如在flutter里面跳转百度页面 需要安装webview_flutter webview_page.dart import package:flutter/material.dart; import package:webview_flutter/webview_flutter.dart;class MyWebView extends StatefulWidget {const MyWebView({super.key, required this.webViewUrl,…

堆栈_有效括号

题比较特殊&#xff0c;主要在于它的所有要输入&#xff0c;都是左括号开头&#xff0c;没有右括号开头的&#xff0c;比如"] ["&#xff0c;这种是不算为括号的&#xff0c;由于必然是对称的&#xff0c;若能符合&#xff0c;因而直接在遇到右括号时&#xff0c;检查…

LeetCode刷题---打家劫舍问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、打家劫舍 题目链接&#xff1a;打家劫舍 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定…

Java实现堆

堆是一种基于完全二叉树的数据结构&#xff0c;它分为大根堆和小根堆。在大根堆中&#xff0c;每个节点的值都大于或等于其子节点的值&#xff1b;而在小根堆中&#xff0c;每个节点的值都小于或等于其子节点的值。 在Java中&#xff0c;我们可以使用数组来表示堆。由于完全二…

RS232串口_笔记

这里写目录标题 1、RS232串口理论起始位数据位校验位LSB & MSB示波器查看数据信号对应连接方式 1、RS232串口理论 UART(通用异步收发传输) 是一种通信协议&#xff0c;而 RS232 (串行通信接口)是种物理接口标准。UART 是一种用于在计算机和外部设备之间传输数据的协议&…

鸿蒙系统开发手册 - HarmonyOS内核驱动层源码分析

众所周知系统定义HarmonyOS是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能…

链表高频面试题

1. 两个链表第一个公共子节点 LeetCode160 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; listA [4,1,8,4,5], listB [5…

11-22 SSM3

书城分页查询 使用mybatis分页插件&#xff1a; 请完成登陆注册 -> 跳转到首页 解决前端上架时间点击切换 以及侧边栏点击由背景颜色的改变 完成超链接的绑定点击时间 -> jquery $(document).ready(function() { // 初始化上架时间状态为 true&#xff08;上架&…

记录一次爱快路由ACL策略引起的大坑

环境&#xff1a; A公司和B公司采用爱快的ipsec互联 B公司同时有加密软件限制网络 问题&#xff1a;对方ERP无法连接我们的数据库服务器 先简单测试了下1433端口是不是通的 下面的测试结果&#xff0c;直接ping是通的&#xff0c;但是加上1433端口后就不通 排查过程&#xff1…

centos7下执行yum命令报错

前言 在Linux系统中&#xff0c;安装nginx时候&#xff0c;需要先安装环境。 Nginx是使用C语言开发&#xff0c;安装nginx需要先从官网上将源码下载&#xff0c;然后编译&#xff0c;编译需要gcc环境,但是在安装gcc环境的时候&#xff0c;执行命令报错。 yum install –y gcc-…