文章目录
- [第1关:JavaAPI 嵌入式开发模式](#第1关:JavaAPI 嵌入式开发模式)
第1关:JavaAPI 嵌入式开发模式
任务描述
本关任务:使用 Java 创建一个新的 Neo4j 数据库,并且建立两个节点的关系。
相关知识
为了完成本关任务,你需要掌握:
- 创建 Neo4j 数据库;
- 启动 Neo4j 数据事务;
- 创建节点;
- 创建节点关系;
- 将创建的数据库设置为默认数据库。
创建 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 数据库了。
可以查询看看我们刚刚创建的节点和关系:
节点查询
编程要求
根据提示,在右侧编辑器补充代码,
-
创建一个名字为:
/root/neo4j_database/graph_1.db
的 Neo4j 数据库; -
创建两个节点,节点属性和值为(第一行为字段名,后面两行分别为 Java 节点和 Scala 节点的属性值):
javaTutorialID,Title,NoOfChapters,Status JAVA001,Learn Java,25,Completed SCALA001,Learn Scala,20,Completed
节点标签和关系标签:
javaNodeLabel:JAVA,SCALA RelationLabel:JVM_LANGIAGES
关系属性与值为:
java
Id,OOPS,FP
1234,YES,YES
- 修改配置文件,更改默认 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*************************
}