图数据库neo4简介以及与Java集成

一、neo4j概述
1.简介

  Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。
  你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

2.特点
  • 查询语言Neo4j CQL类似常用的SQL
  • 遵循属性图数据模型
  • 通过使用Apache Lucence支持索引
  • 支持UNIQUE约束
  • 包含一个用于执行CQL命令的UI:Neo4j数据浏览器
  • 支持完整的ACID(原子性,一致性,隔离性和持久性)规则
  • 采用原生图形库与本地GPE(图形处理引擎)
  • 支持查询的数据导出到JSON和XLS格式
  • 提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
  • 提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
  • 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
3.neo4j数据模型

3.1、图形数据库数据模型的主要构建块是:节点(node),关系(relationship),属性(property)
在这里插入图片描述

  • node(节点):是图表的基本单位。 它包含具有键值对的属性
    在这里插入图片描述
  • property(属性):是用于描述图节点和关系的键值对,Key =value,其中Key是一个字符串,value可以通过使用任何Neo4j数据类型来表示
  • relationship( 关系):是图形数据库的另一个主要构建块。 它连接两个节点,如下所示。
    -在这里插入图片描述
  • label(标签):将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。从前面的图中,我们可以观察到有两个节点。左侧节点都有一个标签:“EMP”,而右侧节点都有一个标签:“Dept”。这两个节点之间的关系,也有一个标签:“WORKS_FOR”,Neo4j将数据存储在节点或关系的属性中。
4.安装download

2.1 、环境要求

  • Neo4j version and JVM requirements
Neo4j VersionJVM compliancy
3.xJava SE 8 Platform Specificaton
4.xJava SE 11 Platform Specificaton

2.2 、mac安装步骤

  • Open up your terminal/shell.
tar -xf neo4j-community-3.5.25-unix.tar.gz
  • Place the extracted files in a permanent home on your server. The top level directory is referred to as NEO4J_HOME.
    To run Neo4j as a console application, use:
<NEO4J_HOME>/bin/neo4j console
  • To run Neo4j in a background process, use:
<NEO4J_HOME>/bin/neo4j start
  • 访问:http://localhost:7474,默认用户名neo4j,密码neo4j
    2.3、docker安装
docker run -it --name my_neo4j -p 7474:7474 -p 7687:7687 --volume=/Users/luoyuan/data/docker/neo4j/data:/data neo4j:4.1.3 

#neo4j自启动
docker container update --restart=always my_neo4j
二、Neo4j - CQL简介
1.概述

 CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

2.Neo4j CQL数据类型
CQL数据类型描述
boolean用于表示布尔文字:true,false
byte用于表示8位整数
short用于表示16位整数
int用于表示32位整数
long用于表示64位整数
float用于表示32位浮点数
double用于表示64位浮点数
char用于表示16位字符
string用于表示字符串
3.CQL常用命令

(1)CREATE:创建 创建节点,关系和属性
(2)MATCH:匹配 检索有关节点,关系和属性数据
(3)RETURN:返回 返回查询结果
(4)WHERE: 提供条件过滤检索数据
(5)DELETE:删除 删除节点和关系
(6)REMOVE:移除 删除节点和关系的属性
(7)ORDER BY:以…排序 排序检索数据
(8)SET 添加或更新标签

4.CREATE详解
  • 创建没有属性的节点
  • 使用属性创建节点
  • 在没有属性的节点之间创建关系
  • 使用属性创建节点之间的关系
  • 为节点或关系创建单个或多个标签

 注意事项

  • Neo4j数据库服务器使用此将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息。
  • Neo4j数据库服务器创建一个作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息。

(1)语法命令

CREATE (<node-name>:<label-name>)

(2) Neo4j CQL创建一个没有属性的节点

#emp 是一个节点名
#Employee 是 emp 节点的标签名称
CREATE (emp:Employee)

(3)Neo4j CQL创建具有属性的节点

#dept是一个节点名
#Dept是emp节点的标签名称
#属性名称是deptno,dname,location
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
5.MATCH详解
  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据

(1)语法命令

MATCH 
(
   <node-name>:<label-name>
)

(2)示例

# 查询Dept下的内容
MATCH (dept:Dept) return dept

# 查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

## 查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN m
6.RETURN子句详解
  • 不能单独使用RETURN子句。我们应该既MATCH使用或CREATE命令。

(1)语法命令

RETURN 
   <node-name>.<property1-name>,
   ........
   <node-name>.<propertyn-name>
7.MATCH & RETURN匹配和返回
  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性

(1)语法命令

MATCH Command
RETURN Command

(2)匹配查询

#dept是节点名称
#Dept是一个节点标签名
#deptno是dept节点的属性名称
#dname是dept节点的属性名
#location是dept节点的属性名
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname,dept.location

在这里插入图片描述

8. CREATE+MATCH+RETURN

(1)本示例演示如何使用属性和这两个节点之间的关系创建两个节点。

 我们将创建两个节点:客户节点 (Customer) 和信用卡节点 (CreditCard)。

 客户节点包含:ID,姓名,出生日期属性

 CreditCard节点包含:id,number,cvv,expiredate属性

 客户与信用卡关系:DO_SHOPPING_WITH

 CreditCard到客户关系:ASSOCIATED_WITH

  • 创建客户节点
#e是节点名称
#在这里Customer是节点标签名称
#id,name和dob是Customer节点的属性名称

CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
  • 创建CreditCard节点
#c是一个节点名
#CreditCard是节点标签名称
#id,number,cvv和expiredate是CreditCard节点的属性名称

CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
9.关系基础

(1)基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系
10.CREATE创建标签

(1)Label是Neo4j数据库中的节点或关系的名称或标识符。

  • 我们可以将此标签名称称为关系为“关系类型”。
  • 我们可以使用CQL CREATE命令为节点或关系创建单个标签,并为节点创建多个标签。 这意味着Neo4j仅支持两个节点之间的单个关系类型。

(2)创建单个标签到节点

CREATE (<node-name>:<label-name>)

(3)创建多个标签到节点

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
#m是一个节点名
#Movie, Cinema, Film, Picture是m节点的多个标签名称
CREATE (m:Movie:Cinema:Film:Picture)

(4)单标签到关系

CREATE (<node1-name>:<label1-name>)-
	[(<relationship-name>:<relationship-label-name>)]
	->(<node2-name>:<label2-name>)

(5)为关系创建标签

#p1和profile1是节点名称和节点标签名称“From Node”
#p2和Profile2是“To Node”的节点名称和节点标签名称
#r1是关系名称
#LIKES是一个关系标签名称
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
11.WHERE子句

(1)语法命令

WHERE <condition>
WHERE <condition> <boolean-operator> <condition>
MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp

(2)使用WHERE子句创建关系

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) 
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
       {<relationship-properties>}]->(<node2-label-name>)
MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r
12.DELETE删除
  • 删除节点。
  • 删除节点及相关节点和关系。

(1)删除节点

DELETE <node-name-list>
MATCH (e: Employee) DELETE e

(2)DELETE节点和关系子句语法

DELETE <node1-name>,<node2-name>,<relationship-name>
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel
13.REMOVE删除

(1)Neo4j CQL REMOVE命令用于

  • 删除节点或关系的标签
  • 删除节点或关系的属性

(2)Neo4j CQL DELETE和REMOVE命令之间的主要区别

  • DELETE操作用于删除节点和关联关系。
  • REMOVE操作用于删除标签和属性。

(3)Neo4j CQL DELETE和REMOVE命令之间的相似性

  • 这两个命令不应单独使用。
  • 两个命令都应该与MATCH命令一起使用。

(4)语法命令

REMOVE <property-name-list>

(5)创建节点并从数据库中永久删除此节点的属性

CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250}) 
#类似于以下两个SQL命令在
CREATE TABLE BOOK(
	id number,
	title varchar2(20),
	pages number,
	price number
);
INSERT INTO BOOK VALUES (122,'Neo4j Tutorial',340,250);
#删除“price”属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book

(6)删除节点/关系的标签

REMOVE <label-name-list> 
MATCH (m:Movie) 
REMOVE m:Picture
14. SET子句
  • 向现有节点或关系添加新属性
  • 添加或更新属性值

(1)语法

SET  <property-name-list>
MATCH (book:Book) RETURN book

MATCH (book:Book)  SET book.title = 'superstar'   RETURN book
15.Neo4j CQL ORDER BY子句
  • Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。
  • 默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

(1)语法命令

ORDER BY  <property-name-list>  [DESC]	
MATCH (emp:Employee) RETURN emp.empid,emp.name,emp.salary,emp.deptno
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
16. UNION联合
  • 它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。
  • 结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
    (1)命令语法
<MATCH Command1>
   UNION
<MATCH Command2>
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

(2)UNION ALL子句

  • 结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。
  • 结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。
<MATCH Command1>
UNION ALL
<MATCH Command2>
17.LIMIT和SKIP子句

(1)语法命令

MATCH (emp:Employee) 
RETURN emp
LIMIT 2
MATCH (emp:Employee) 
RETURN emp
SKIP 2
18.MERGE合并
  • 创建节点,关系和属性
  • 为从数据库检索数据
  • MERGE命令是CREATE命令和MATCH命令的组合。
  • MERGE = CREATE + MATCH
  • Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果,如果它不存在于图中,则它创建新的节点/关系并返回结果。

(1)语法命令

MERGE (<node-name>:<label-name>
{
   <Property1-name>:<Pro<rty1-Value>
   .....
   <Propertyn-name>:<Propertyn-Value>
})
MATCH  (gp1:GoogleProfile1) 
RETURN gp1.Id,gp1.Name
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

最后推荐一款纯免费的vip歌曲听歌软件,欢迎大家下载
免费视听软件

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的 Java 项目集成 Neo4j 的示例: 1. 首先,您需要在项目中添加 Neo4j 驱动程序的依赖项。可以通过 Maven 或 Gradle 添加依赖项。如果您使用 Maven,请在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j-java-driver</artifactId> <version>4.2.1</version> </dependency> ``` 如果您使用 Gradle,请在 build.gradle 文件中添加以下依赖项: ```groovy implementation 'org.neo4j.driver:neo4j-java-driver:4.2.1' ``` 2. 然后,您需要创建一个 Neo4j 驱动程序实例。您可以使用以下代码: ```java Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "password")); ``` 此代码将创建一个使用 Bolt 协议连接到本地 Neo4j 数据库的驱动程序实例。请注意,您需要替换 "password" 为您自己的数据库密码。 3. 接下来,您可以使用驱动程序实例执行查询。以下是一个简单的示例: ```java try (Session session = driver.session()) { Result result = session.run("MATCH (n) RETURN n.name AS name"); while (result.hasNext()) { Record record = result.next(); System.out.println(record.get("name").asString()); } } ``` 此代码将执行一个查询,返回所有节点的名称,并将结果打印到控制台。 4. 最后,您需要关闭驱动程序实例。以下是一个示例: ```java driver.close(); ``` 这将关闭驱动程序实例并释放与数据库的连接。 完整的示例代码如下: ```java import org.neo4j.driver.AuthTokens; import org.neo4j.driver.Driver; import org.neo4j.driver.GraphDatabase; import org.neo4j.driver.Record; import org.neo4j.driver.Result; import org.neo4j.driver.Session; public class Neo4jDemo { public static void main(String[] args) { Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "password")); try (Session session = driver.session()) { Result result = session.run("MATCH (n) RETURN n.name AS name"); while (result.hasNext()) { Record record = result.next(); System.out.println(record.get("name").asString()); } } driver.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码出天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值