neo4j 入门教程 Neo4j - 原生Java API

2024-02-25 开发教程 neo4j 入门教程 匿名 0

在本章中,我们将使用Neo4j Native Java API开发和测试Java应用程序。 我们将在下一章讨论Neo4j Cypher Java API。

在开发应用程序之前,请参考“Neo4j Java环境设置”一章来设置Eclipse IDE来开发此应用程序

Neo4j原生Java API示例

此示例演示如何在Eclipse IDE中开发Java应用程序以开发和测试Neo4j原生ava API示例

请按照“Neo4j Java环境设置”一章中提到的所有步骤操作

第1步 -在同一个Java项目中创建一个Java程序

现在开始编写Neo4j Java API编码以执行Neo4j DB操作

第2步 -创建Neo4j数据库

GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");

它在指定的路径为我们创建一个Schema / Database,如下所示。这类似于Oracle SQL的“CREATE DATABASE”命令。

第3步 -启启动Neo4j数据库事务以提交我们的更改

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

所以对于你的Java程序源代码看起来像

package com.tp.neo4j.java.examples;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
public class Neo4jJavaAPIDBOperation {
public static void main(String[] args) {
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db = dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
try (Transaction tx = db.beginTx()) {
// Perform DB operations
tx.success();
}
}
}

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

package com.tp.ne4oj.java.examples;
import org.neo4j.graphdb.Label;
public enum Tutorials implements Label {
JAVA,SCALA,SQL,NEO4J;
}

第5步 -创建节点并为其设置属性

创建两个节点

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");

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

package com.tp.neo4j.java.examples;
import org.neo4j.graphdb.RelationshipType;
public enum TutorialRelationships implements RelationshipType{
JVM_LANGIAGES,NON_JVM_LANGIAGES;
}

第7步 -创建节点之间的关系并设置它的属性。

创建从Java节点到Scala节点的关系

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

将属性设置为此关系

relationship.setProperty("Id","1234");
relationship.setProperty("OOPS","YES");
relationship.setProperty("FP","YES");

第8步 -最终源代码。

package com.tp.neo4j.java.examples;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
public class Neo4jJavaAPIDBOperation {
public static void main(String[] args) {
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
try (Transaction tx = db.beginTx()) {
Node javaNode = db.createNode(Tutorials.JAVA);
javaNode.setProperty("TutorialID", "JAVA001");
javaNode.setProperty("Title", "Learn Java");
javaNode.setProperty("NoOfChapters", "25");
javaNode.setProperty("Status", "Completed");
Node scalaNode = db.createNode(Tutorials.SCALA);
scalaNode.setProperty("TutorialID", "SCALA001");
scalaNode.setProperty("Title", "Learn Scala");
scalaNode.setProperty("NoOfChapters", "20");
scalaNode.setProperty("Status", "Completed");
Relationship relationship = javaNode.createRelationshipTo
(scalaNode,TutorialRelationships.JVM_LANGIAGES);
relationship.setProperty("Id","1234");
relationship.setProperty("OOPS","YES");
relationship.setProperty("FP","YES");
tx.success();
}
System.out.println("Done successfully");
}
}

第9步 -在执行此Java程序之前,检查您的Neo4j是否处于关闭模式。 如果没有,请点击“停止”按钮展开它。

第10步 -执行Java程序并在Eclipse IDE控制台中观察输出。

选择我们的Neo4j数据库文件夹,然后单击“开始”按钮

一旦此数据库成功启动,通过单击“http:// localhost:7474”链接访问Neo4j浏览器来观察我们的数据。

第11步 -在Neo4j数据浏览器的$ prompt下键入以下命令

MATCH (a)-[r:JVM_LANGIAGES]->(b)
RETURN r

单击“Java”节点以查看其属性

单击“Scala”节点以查看其属性

单击关系以查看其属性

注意 -
如果我们的Neo4j服务器通过引用我们新创建的数据库启动和运行,那么我们不能执行我们的程序,因为服务器已经锁定了这个数据库。
所以当我们执行我们以前的程序时,我们会得到一些错误堆栈跟踪
java.io.IOException:C:\TPNeo4jDB\lock because another process already holds the lock.
为了避免这个问题,首先停止我们的服务器,然后执行程序。
因为默认情况下Neo4j DB Server一次只接受一个锁。 在实时应用程序中,Ne04J DBA人员将更新数据库属性以允许一次允许一些数量的锁。