1.Neo4j简介

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

Neo4j的官方网站:http://www.neo4j.org

2.安装Neo4j

网上安装教程很多,本文是在mac电脑下使用docker+Kitematic安装的,步骤大致如下:

1.启动docker
2.在Kitematic中搜索Neo4j镜像并安装,这里安利一下这个软件,安装一些镜像非常方便,如下图:

3.安装完成后,访问对应web地址,如下:

3.SpringBoot整合

接下来介绍SpringBoot中如何视同Neo4j。

3.1 添加Neo4j依赖

创建项目,pom文件中引入依赖,如下:

org.springframework.boot

spring-boot-starter-data-neo4j

3.2 配置文件

在配置文件中配置Neo4j相关配置,如下:

# neo4j配置

spring.data.neo4j.uri= bolt://localhost:7687

spring.data.neo4j.username=neo4j

spring.data.neo4j.password=neo4j

3.3 创建对应entity

这里以部门为例,要创建一个如下的图:

* CEO

* -设计部

* - 设计1组

* - 设计2组

* -技术部

* - 前端技术部

* - 后端技术部

* - 测试技术部

那么这里简单创建一个部门实体和一个关系实体。

其中部门实体,如下:

@NodeEntity(label = "dept")

@Data

@Builder

public class Dept {

@Id

@GeneratedValue

private Long id;

@Property(name = "deptName")

private String deptName;

}

关系实体如下:

@RelationshipEntity(type = "relationShip")

@Data

@Builder

public class RelationShip {

@Id

@GeneratedValue

private Long id;

@StartNode

private Dept parent;

@EndNode

private Dept child;

}

这里说明一下几个注解的意思:

  • @NodeEntity:标明是一个节点实体

  • @RelationshipEntity:标明是一个关系实体

  • @Id:实体主键

  • @Property:实体属性

  • @GeneratedValue:实体属性值自增

  • @StartNode:开始节点(可以理解为父节点)

  • @EndNode:结束节点(可以理解为子节点)

3.4 repository

由于使用的spring-data操作neo4j,所以实现逻辑类似,创建接口继承Neo4jRepository。

DeptRepository如下:

import org.springframework.data.neo4j.repository.Neo4jRepository;

import org.springframework.stereotype.Repository;

@Repository

public interface DeptRepository extends Neo4jRepository<Dept,Long> {

}

RelationShipRepository如下:

import org.springframework.data.neo4j.repository.Neo4jRepository;

import org.springframework.stereotype.Repository;

@Repository

public interface RelationShipRepository extends Neo4jRepository<RelationShip, Long> {

}

3.5 基本使用

这里创建了一些基础方法,使用方式和spring-data-jpa类似,由于需要构建一个本文3.1所描述的图,所以创建了一个create方法来初始化数据,完整代码如下:

@RestController

public class TestController {

@Resource

private DeptRepository deptRepository;

@Resource

private RelationShipRepository relationShipRepository;

/**

* CEO

* -设计部

* - 设计1组

* - 设计2组

* -技术部

* - 前端技术部

* - 后端技术部

* - 测试技术部

*/

@GetMapping("create")

public void create(){

Dept CEO = Dept.builder().deptName("CEO").build();

Dept dept1 = Dept.builder().deptName("设计部").build();

Dept dept11 = Dept.builder().deptName("设计1组").build();

Dept dept12 = Dept.builder().deptName("设计2组").build();

Dept dept2 = Dept.builder().deptName("技术部").build();

Dept dept21 = Dept.builder().deptName("前端技术部").build();

Dept dept22 = Dept.builder().deptName("后端技术部").build();

Dept dept23 = Dept.builder().deptName("测试技术部").build();

List<Dept> depts = new ArrayList<>(Arrays.asList(CEO,dept1,dept11,dept12,dept2,dept21,dept22,dept23));

deptRepository.saveAll(depts);

RelationShip relationShip1 = RelationShip.builder().parent(CEO).child(dept1).build();

RelationShip relationShip2 = RelationShip.builder().parent(CEO).child(dept2).build();

RelationShip relationShip3 = RelationShip.builder().parent(dept1).child(dept11).build();

RelationShip relationShip4 = RelationShip.builder().parent(dept1).child(dept12).build();

RelationShip relationShip5 = RelationShip.builder().parent(dept2).child(dept21).build();

RelationShip relationShip6 = RelationShip.builder().parent(dept2).child(dept22).build();

RelationShip relationShip7 = RelationShip.builder().parent(dept2).child(dept23).build();

List<RelationShip> relationShips = new ArrayList<>(Arrays.asList(relationShip1,relationShip2,relationShip3,relationShip4,relationShip5

,relationShip6,relationShip7));

relationShipRepository.saveAll(relationShips);

}

@GetMapping("get")

public RelationShip get(Long id){

Optional<RelationShip> byId = relationShipRepository.findById(id);

return byId.orElse(null);

}

@GetMapping("deleteRelationShip")

public void deleteRelationShip(Long id){

relationShipRepository.deleteById(id);

}

@GetMapping("deleteDept")

public void deleteDept(Long id){

deptRepository.deleteById(id);

}

@GetMapping("deleteAll")

public void deleteAll(){

deptRepository.deleteAll();

relationShipRepository.deleteAll();

}

}

执行create方法初始化数据,结果如下图所示:

其余测试方法这里就不在演示了,可以自行测试。

4.Neo4j基本命令

4.1 操作命令简介

接下来介绍一下Neo4j的基本操作命令。

  • CREATE命令:创建节点命令

  • MATCH命令:查询命令

  • RETURN命令:返回数据命令

  • DELETE命令:删除命令,可以用于删除节点和关联节点信息

  • REMOVE命令:可以用于删除标签和属性

4.2 简单练习

创建命令,可以用来创建节点和关系节点,比如我们要在创建一个部门,秘书部,如下,执行如下命令:

CREATE (d:dept {deptName:"秘书部"})

操作后如下图所示:

目前可以看到,秘书部和其余节点是没有关系的,那么接下来将秘书部与CEO创建关系,执行如下命令:

MATCH (n:dept {deptName:"CEO"}),(m:dept {deptName:"秘书部"}) CREATE (n)-[r:relationShip]->(m) return r;

查看结果如图:

可以看到秘书部已经挂在了CEO节点下。

其中从上面就可以看出,CQL语句大致结构如下:

  • MATCH RETURN:查询命中结果返回;

  • MATCH CREATE RETURN:查询后创建关系返回;

  • MATCH DELETE:查询命中删除;

...

5.源码

源码地址:https://gitee.com/dalaoyang/springbootlearn/tree/master/springboot2neo4j

6.参考

参考地址:

https://baike.baidu.com/item/Neo4j/9952114?fr=aladdin
http://www.neo4j.org

neo4j安装_SpringBoot使用Neo4j相关推荐

  1. neo4j安装_基于Neo4j的知乎关系爬虫

    贴一个16年当时写的一个爬取知乎用户follow关系的爬虫.做这个爬虫是受一个知乎专栏的启发Web Crawler with Python - 09.怎样通过爬虫找出我和轮子哥.四万姐之间的最短关系, ...

  2. neo4j安装_Neo4J和Enterprise Java的撤消功能

    neo4j安装 我创建了一个示例,说明如何在使用Neo4J数据库的Quarkus应用程序中实现撤消功能. 从用户的角度来看,撤消操作可能看起来并不引人注目,但是一旦您知道需要在数据库端考虑的内容,它就 ...

  3. 使用neo4j_知识图谱Task00:Neo4j安装配置

    知识图谱开源内容: https://github.com/datawhalechina/team-learning-nlp/tree/master/KnowledgeGraph_Basic 19 学习 ...

  4. neo4j安装_neo4j 社区版win10 下安装

    准备工作: Neo4j下载网址:https://neo4j.com/download-center/#releases ava jdk官网下载:https://www.oracle.com/techn ...

  5. neo4j安装_怎样安装Neo4j APOC扩展包?

    APOC - Awesome Procedures of Cypher 是Neo4j图数据库的扩展过程和函数库. Neo4j图数据库扩展是基于Neo4j相关API和开发框架.使用Java开发的.部署在 ...

  6. Windows 10 64位系统下Neo4j安装教程(2021.1.13)

    Win 10安装Neo4j图数据库 1.Neo4j简介 2.Neo4j安装 2.1 查看安装好的JDK版本 2.1.1 JDK 11下载与安装 2.1.2 JDK8和JDK11共存 2.2 安装Neo ...

  7. 全网最详细的Neo4j安装教程

    全网最详细的Neo4j安装教程 一.前言 Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是 ...

  8. neo4j安装详细步骤(小白版)

    (血战一下午,终于把NEO4J安装好了,很多教程还是非常友好的,但对于像我这样的小白,只想说各位大佬真的好强,而我差一步都不得行.) 参考:https://blog.csdn.net/konggu_y ...

  9. Neo4j安装及简单使用

    一.Neo4j和图数据库简介 neo4j是基于Java语言编写图形数据库.图是一组节点和连接这些节点的关系.图形数据库也被称为图形数据库管理系统或GDBMS. Neo4j的是一种流行的图形数据库. 其 ...

最新文章

  1. iOS直播(三)GPUImage音视频采集并写入文件
  2. 使用NSCondition实现多线程同步
  3. mysql between 查询不出来_mysql的语句优化
  4. [机器学习笔记]Note5--归一化
  5. mvc一对多模型表单的快速构建
  6. 计算机的屏幕约是16平方分米吗,小明的卧室有16平方分米对不对
  7. thinkphp福娃源码交易网站源码
  8. 前后端分离后 前端获得session数据_机器学习模型部署--打通前后端任督二脉
  9. java解决Exception in thread “main“ java.lang.OutOfMemoryError: GC overhead limit exceeded
  10. 持久化框架数据持久化框架(JPA)及其具体实现
  11. delphi 如何判断 socket 连接成功_Linux下的C++ socket编程实例
  12. R-WipeClean(磁盘清理工具)v20.0.2230绿色版
  13. (转)CRC校验算法详解
  14. Java POI 合并单元格操作以及代码示例
  15. 用树形算法思想去使用思维导图\树形图\鱼骨图
  16. 变量覆盖(超详细!)
  17. 使用kafka-reassign-partitions.sh重新对topic分区,ReplicationFactor由1变成3
  18. 计算机上哪个键可以按出符号,键盘符号怎么打出来_各种符号在键盘上怎么打出来-win7之家...
  19. 数值分析复化求积matlab,MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)...
  20. 【转】iOS Memory 内存详解

热门文章

  1. 干货|简单理解逻辑回归基础
  2. YOLOv5在建筑工地中安全帽佩戴检测的应用
  3. 深度学习在三维环境重建中的应用
  4. Win10环境Tensorflow-GPU13.1/JupyterNotebook的安装
  5. LightOJ 1095 Arrange the Numbers(容斥原理)
  6. 从Netflix的Hystrix框架理解服务熔断和服务降级
  7. docker centos 无法用systemctl 启动服务的问题
  8. 两款接口测试工具推荐
  9. 怎样的视频监控的管理与运营才算高效
  10. 浅谈Android系统开发中LOG的使用【转】