当前位置:   article > 正文

【图数据库】Neo4j与Java调用_neo4j writetransaction java

neo4j writetransaction 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>
  • 1
  • 2
  • 3
  • 4
  • 5

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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

这段代码的意思应该是,通过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'})
  • 1

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

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

上面这个语句的意思是,创建节点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)
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/518824
推荐阅读
相关标签
  

闽ICP备14008679号