1.Neo4j简介

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

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 {

}

RelationShipRepository如下:

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

import org.springframework.stereotype.Repository;

@Repository

public interface RelationShipRepository extends Neo4jRepository {

}

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 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 relationShips = new ArrayList<>(Arrays.asList(relationShip1,relationShip2,relationShip3,relationShip4,relationShip5

,relationShip6,relationShip7));

relationShipRepository.saveAll(relationShips);

}

@GetMapping("get")

public RelationShip get(Long id){

Optional 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.源码

6.参考

参考地址:

neo4j springboot 日志_SpringBoot使用Neo4j相关推荐

  1. neo4j springboot 日志_springBoot 与neo4j的简单整合

    Neo4j简介 Neo4j是基于java语言实现的世界领先的图形数据库, 是一个高性能的图形存储,具有成熟和强大的数据库所需的所有功能,如友好的查询语言(Cypher)和ACID事务.对于许多应用程序 ...

  2. springboot 日志_Springboot与日志

    1.日志框架 JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面(日志的抽象层) 日志实现 JCL(Jakarta Commons Lo ...

  3. neo4j springboot 日志_Springboot2.3集成neo4j的过程和踩坑记

    最近有个需求是要使用neo4j这个数据库,看官方的介绍是个图形数据库,官方没有看到和springboot整合的文档(可能是我没找着),那就自己动手吧- 最近有个需求是要使用neo4j这个数据库,看官方 ...

  4. neo4j安装_SpringBoot使用Neo4j

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

  5. java连接neo4j(使用spring data neo4j)

    1. Spring Data Neo4j概述 认识Spring-Data-Neo4j之前,需要先对OGM有一个了解 OGM即对象图映射(Object Graph Mapper ,简称ORM ),基于O ...

  6. neo4j(一).初识图数据库neo4j

    neo4j是图数据库 初识neo4j,首先我们要知道neo4j是图数据库.我们平常用的数据库一般是RDBMS(关系型数据库),那么什么是图数据库呢?既然有了关系型数据库,那么为什么要有图数据库呢? 1 ...

  7. linux如何安装neo4j,Ubuntu16.04 如何安装neo4j数据库

    什么是neo4j数据库? neo4j数据库是图数据库的一种,属于nosql的一种,常见的nosql数据库还有redis.memcached.mongDB等,不同于传统的关系型数据库,nosql数据也有 ...

  8. 2021-04-06 neo4j Service stop failed - service ‘neo4j’ not found 请问怎么解决?

    识别不到neo4j服务命令? 在win环境下配置安装好了neo4j社区版,版本号为3.5.5.安装完发现在黑屏终端下只认识neo4j console命令,stop,strat都报错! Service ...

  9. Spring Boot与日志 ——日志框架、日志配置||SLF4j使用||SpringBoot日志关系||切换日志框架

    1.日志框架 SLF4j使用 1.如何在系统中使用SLF4j 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法: 给系统里面导入slf4j的jar和 lo ...

  10. springboot日志配置

    SpringBoot日志使用 1. 在springboot中测试打印日志 package com.leon.springboot_log;import org.apache.logging.log4j ...

最新文章

  1. Linux下gdb attach的使用(调试已在运行的进程)
  2. c语言如何持续输入字符直到指定字符结束_《小白学C》第三章 常用输入输出函数...
  3. WebView你真的熟悉吗?看了才知道
  4. linux下查看线程数的几种方法
  5. IBM推出云深度学习图形芯片Tesla P100 GPU加速器
  6. ecshop静态、 ecshop伪静态、ecshop伪静态设置详细方法、ECSHOP静态化方法
  7. 论文浅尝 - EMNLP2020 | 基于规则引导的协作 agent 知识图谱推理学习
  8. 设计一算法,判断给定单链表的长度是奇数还是偶数
  9. JS--------文件操作基本方法:上传/下载
  10. 全球最快!湖南大学天河超算存储系统!
  11. RDD与DataFrame
  12. PPT高级教程及技巧
  13. 使用 ListView 控件展示数据
  14. 指定目录下创建TXT文件
  15. [1125]AES加密报错:Illegal key size or default parameters
  16. Java Cryptography
  17. 【2022 年第十二届 MathorCup杯数学建模】D 题 移动通信网络站址规划和区域聚类问题 赛后总结、论文及代码
  18. python3卸载_python3卸载
  19. 排球分组循环交叉编排_同学!中国海洋大学第一届排球联赛等你来战!
  20. SpringBoot-日志配置

热门文章

  1. Total Commander工具栏图标 备份
  2. VPC中安装Windows Server 2008
  3. ViewPager嵌套viewpager有什么冲突问题
  4. 1007 计算(a+b)*c的值
  5. bootstrap创建响应式网站
  6. WIN计算机左侧没有桌面,电脑桌面没有计算机图标!三步解决!
  7. php扩展ui,jQuery UI 扩展小部件
  8. php常用数组,php常用数组函数
  9. 多层陶瓷电容器用处_具有综合优异电卡性能的无铅多层陶瓷电容器研究新进展...
  10. python成员变量_Python——成员变量