【图数据库】Neo4j与Java调用

参考资料:
Neo4j官方教程
Neo4j的Github地址
The Neo4j Drivers Manual v4.1
neo4j 教程——这是在W3CSchool上非常系统的关于Neo4j的中文教程,非常有必要看一下。

1. Neo4j的安装

可以在官网的下载地址下载,安装本地的版本。下载好安装程序之后,直接打开安装就行了。初次运行程序的时候,需要设置一下默认的工作文件夹,然后将下载页面的Neo4j Desktop Activation Key粘贴到所需要的位置即可。等配置文件配置完成,就可以开始使用了。

2. Neo4j简介

Neo4j is an open-source, NoSQL, native graph database

Neo4j是一种图数据库。与关系型数据库相比,图数据库更能反映数据之间的联系。在Neo4j中,最基本的元素是节点(Nodes )关系(Relationships ),其他的基本概念可以参考Graph database concepts。如下图所示,节点和边都可以添加属性,可以表示丰富且复杂的信息。关系型数据库和图数据库之间的区别可以参考这篇文章:图数据库和关系型数据库的比较
在这里插入图片描述
在neo4j中,可以对数据进行查询、插入、删除等相关的操作,和其他的关系型数据库一样。因为是图数据库,所以还可以进行路径检索等功能。所使用的的查询语言是Cypher语言,官网有关于Cypher语言的介绍——Cypher Query Language,也可以看这篇中文的教程和介绍——Neo4j Cypher查询语言详解。之前在使用Neo4j的时候,我也记录了一些常用的Cypher语句——neo4j 常用 Cypher 语句笔记

3. 使用Java调用Neo4j

参考资料
Java连接Neo4j的两种方式

3.1 Java环境要求

  • Java 8 or 11,可以参考廖雪峰的安装JDK进行Java环境的安装。

Please note the minimum version compatibilities:
Neo4j Server 3.x - Java 8
Neo4j Server 4.x - Java 11

3.2 Neo4j Java架构

摘自:Neo4j Java架构

Neo4j支持两种类型的API:

  • Neo4j的原生的Java API
  • Neo4j Cypher Java API

Neo4j原生Java API是一种低级别的纯JAVA API,用于执行数据库操作。 Neo4j Cypher Java API是简单而强大的JAVA API,用于执行所有CQL命令以执行数据库操作。

下图显示了Neo4j JAVA API应用程序的体系结构:

在这里插入图片描述
客户端程序使用Neo4j Java API之一来在Neo4j数据库上交互和执行数据库操作。

3.3 Neo4j Drivers

  • Neo4j Drivers的Maven文件配置——这里用到的是4.2.0版本的Driver API。
<dependency>
	<groupId>org.neo4j.driver</groupId>
	<artifactId>neo4j-java-driver</artifactId>
	<version>4.2.0</version>
</dependency>

Neo4j Drivers主要用于基于服务器的开发,要求neo4j必须是开启的状态。

首先,在Neo4j里面创建一个project,然后在这个project里面新建一个数据库。

在这里插入图片描述
建立好一个数据库之后,点击start开始运行。

在这里插入图片描述
运行之后,点击open,可以看到这样的一段话:

在这里插入图片描述
这里的bolt://localhost:7687就是后面要用的连接到这个数据库的uri,用户名是neo4j,密码是创建这个数据库的时候使用的密码。

总的来说,要使用Driver来访问和调用这个数据库,有以下两个必要的条件:

  • 数据库已运行
  • 用户名和密码正确

这里的neo4j是默认的管理员,如果要增加新的用户名或者删除已有的用户名,可以在下面这个位置添加或者删除。同时可以设置用户的操作权限。
在这里插入图片描述
完整的一个小程序如下所示:

import org.neo4j.driver.*;
import static org.neo4j.driver.Values.parameters;

public class HelloExample {
	
	public static void main(String[] args) throws Exception {
		Driver driver = GraphDatabase.driver("bolt://localhost:7687",
											 AuthTokens.basic("neo4j", "123456"));
		Session session = driver.session();
		
		final String message = "Greeting";
		String greeting = session.writeTransaction(
			new TransactionWork<String>(){
				public String execute(Transaction tx ) {
					Result result = tx.run("CREATE (a:Greeting) " +
                            "SET a.message = $message " +
                            "RETURN a.message + ', from node ' + id(a)",
                            parameters( "message", message));
					return result.single().get( 0 ).asString();
				}
			}
		);
		
		System.out.println(greeting);
		
		System.out.println("OK");
		driver.close();
	}
}

这段代码的意思应该是,通过uri和用户名、密码进入了数据库中,然后通过打包上传transaction命令完成一系列操作。这一系列命令是通过Cypher语言命令来完成的(有点类似SPARQL的那种操作)。

4. Cypher语言

参考资料
Neo4j Cypher Refcard 4.2——这个是Cypher官方的一个教程文档,包括所有的命令和语法格式,需要用的时候可以在这里查询。

4.1 CREATE

语句功能
CREATE (n {name: $value})Create a node with the given properties. 根据给定的一系列属性创建节点。
CREATE (n $map)Create a node with the given properties.
CREATE (n)-[r:KNOWS]->(m)Create a relationship with the given type and direction; bind a variable to it.
CREATE (n)-[:LOVES {since: $value}]->(m)Create a relationship with the given type, direction, and properties.

例子:

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})

这个语句的意思是,创建一个节点TheMatrix,它的标签是Movie,它拥有后面的一系列属性。

CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)

上面这个语句的意思是,创建节点KeanuTheMatrix之间的关系。

需要注意的是,如果上面这两个语句是分开执行的,那么neo4j无法识别关系语句中的Keanu就是节点创建语句中的Keanu节点。这几个语句应该在同一个transaction中执行。

CREATE
(TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'}),
(Keanu:Person {name:'Keanu Reeves', born:1964}),
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用Java调用Neo4j,首先需要在Java中添加Neo4j的驱动程序。Neo4j官方提供了Java驱动程序,可以通过Maven或Gradle等构建工具来添加依赖。 然后,可以使用Java代码创建一个Neo4j的连接,并使用该连接来执行Cypher查询语句。以下是一个简单的示例: ```java import org.neo4j.driver.*; import static org.neo4j.driver.Values.parameters; public class Neo4jExample { public static void main(String... args) { // Create a Neo4j driver instance Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("username", "password")); // Execute a Cypher query try (Session session = driver.session()) { String greeting = session.writeTransaction(tx -> { Result result = tx.run("CREATE (a:Greeting) " + "SET a.message = $message " + "RETURN a.message + ', from node ' + id(a)", parameters("message", "Hello, World!")); return result.single().get(0).asString(); }); System.out.println(greeting); } // Close the driver instance driver.close(); } } ``` 此代码将连接到Neo4j数据库,创建一个名为“Greeting”的节点,并将消息设置为“Hello, World!”。然后,它将打印出从数据库返回的消息。 需要注意的是,此代码使用了Neo4j的事务机制来执行Cypher查询。在使用Neo4j时,建议使用事务来确保数据的一致性和可靠性。 除了以上示例,还可以使用Java驱动程序执行更复杂的查询,并在Java应用程序中使用Neo4j的各种功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值