热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

neo4jspringboot日志_SpringBoot使用Neo4j

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

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 &#61; new ArrayList<>(Arrays.asList(CEO,dept1,dept11,dept12,dept2,dept21,dept22,dept23));

deptRepository.saveAll(depts);

RelationShip relationShip1 &#61; RelationShip.builder().parent(CEO).child(dept1).build();

RelationShip relationShip2 &#61; RelationShip.builder().parent(CEO).child(dept2).build();

RelationShip relationShip3 &#61; RelationShip.builder().parent(dept1).child(dept11).build();

RelationShip relationShip4 &#61; RelationShip.builder().parent(dept1).child(dept12).build();

RelationShip relationShip5 &#61; RelationShip.builder().parent(dept2).child(dept21).build();

RelationShip relationShip6 &#61; RelationShip.builder().parent(dept2).child(dept22).build();

RelationShip relationShip7 &#61; RelationShip.builder().parent(dept2).child(dept23).build();

List relationShips &#61; new ArrayList<>(Arrays.asList(relationShip1,relationShip2,relationShip3,relationShip4,relationShip5

,relationShip6,relationShip7));

relationShipRepository.saveAll(relationShips);

}

&#64;GetMapping("get")

public RelationShip get(Long id){

Optional byId &#61; relationShipRepository.findById(id);

return byId.orElse(null);

}

&#64;GetMapping("deleteRelationShip")

public void deleteRelationShip(Long id){

relationShipRepository.deleteById(id);

}

&#64;GetMapping("deleteDept")

public void deleteDept(Long id){

deptRepository.deleteById(id);

}

&#64;GetMapping("deleteAll")

public void deleteAll(){

deptRepository.deleteAll();

relationShipRepository.deleteAll();

}

}

执行create方法初始化数据&#xff0c;结果如下图所示&#xff1a;

其余测试方法这里就不在演示了&#xff0c;可以自行测试。

4.Neo4j基本命令

4.1 操作命令简介

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

CREATE命令&#xff1a;创建节点命令

MATCH命令&#xff1a;查询命令

RETURN命令&#xff1a;返回数据命令

DELETE命令&#xff1a;删除命令&#xff0c;可以用于删除节点和关联节点信息

REMOVE命令&#xff1a;可以用于删除标签和属性

4.2 简单练习

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

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

操作后如下图所示&#xff1a;

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

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

查看结果如图&#xff1a;

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

其中从上面就可以看出&#xff0c;CQL语句大致结构如下&#xff1a;

MATCH RETURN:查询命中结果返回&#xff1b;

MATCH CREATE RETURN:查询后创建关系返回&#xff1b;

MATCH DELETE:查询命中删除&#xff1b;

...

5.源码

6.参考

参考地址&#xff1a;



推荐阅读
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
author-avatar
xin新的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有