springBoot 与neo4j的简单整合示例

Neo4j简介

Neo4j是基于java语言实现的世界领先的图形数据库, 是一个高性能的图形存储,具有成熟和强大的数据库所需的所有功能,如友好的查询语言(Cypher)和ACID事务。对于许多应用程序,与关系数据库相比,Neo4j提供了数量级的性能优势。主要应用于图检索和关系计算。其优点在于:

  • 节点没上线(3.0以后去掉了限制)
  • 扩展性很好,支持集群和企业版
  • 数据ETL有丰富的工具支持,自带GUI
  • 良好的WebUI

更加详细的介绍参考:https://neo4j.com/docs/getting-started/current/graphdb-concepts/

Neo4j安装

Neo4j在不同部署环境中的安装,例如Linux,Mac OS,Windows,Debian,Docker或CAPI Flash,以下介绍在windows系统中的安装方法:

1.下载最新安装包

点击以下地址:https://neo4j.com/download-center/,选择社区服务器下相应版本下载即可。

2.安装Neo4j

解压安装包到相应目录后在bin目录下打开命令提示符或者任意地方打开命令提示符进入bin目录下

如图的四个命令:
(1)进入bin目录下
(2)neo4j 查询相应命令
(3)install-service 安装Neo4j服务
(4)start 启动服务

服务安装成功之后浏览器输入 http://localhost:7474/browser/ 即可访问登录页面,其中用户名密码都为neo4j,登陆后可修改密码,登录页面如下图

其余环境的服务安装方法可参考:https://neo4j.com/docs/operations-manual/3.5/installation/

Neo4j与springBoot简单整合

大概了解了Neo4j和进行安装之后,接下来就对Neo4j和springBoot进行一个简单的整合,如图实例我们依据图中人物与电影的关系建立一个简单的demo(图片源自官方文档)

1.建立一个springBoot项目

2.引入neo4j的pom

 <dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-neo4j</artifactId>
 </dependency>
 </dependencies>

3.建立一个Person和Movie的实体类

@NodeEntity
public class Person {
 @Id
 @GeneratedValue
 private Long id;
 private String name;
 private String born;
 public Person() {// 从 Neo4j API 2.0.5开始需要无参构造函数

 }
 public Person(String name, String born) {
 this.name = name;
 this.born = born;
 }
 //省略getter and setter
@NodeEntity
public class Movie {
 @Id
 @GeneratedValue
 private Long id;
 private String title;
 private String released;
 public Movie() {

 }
 public Movie(String title, String released) {
 this.title = title;
 this.released = released;
 }
 //省略getter and setter

需要注意的是类上@NodeEntity,标识这是一个节点,实体类中还需要一个无参构造方法,从 Neo4j API 2.0.5开始需要的。

4.建立MovieRepository和PersonRepository

public interface MovieRepository extends CrudRepository<Movie, Long> {
 Movie findByTitle(String title);
}
public interface PersonRepository extends CrudRepository<Person, Long> {
 Person findByName(String name);
}

其中继承CrudRepository已经可以实现简单的CRUD了

5.在Person中建立movie与演员、导演的指向关系

 @Relationship(type = "ACTED_IN", direction = Relationship.OUTGOING)
 public Set<Movie> actors;

 public void addActor(Movie movie) {
 if (actors == null) {
  actors = new HashSet<>();
 }
 actors.add(movie);
 }

 @Relationship(type = "DIRECTED", direction = Relationship.OUTGOING)
 public Set<Movie> directors;

 public void addDirector(Movie movie) {
 if (directors == null) {
  directors = new HashSet<>();
 }
 directors.add(movie);
 }

@Relationship这个注解表示关系,type是关系名称,direction是方向,例子中的是person——>movie

6.application.properties配置文件中建立数据库连接

#本地连接可以省略该行,非本地配置改对应ip
#spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123456

7.单元测试

(1)创建movie

 @Test
 public void testSaveMovie() {
 Movie m1 = new Movie("无问西东", "2018");
 Movie m2 = new Movie("罗曼蒂克消亡史", "2016");
 movieRepo.save(m1);
 movieRepo.save(m2);
 }

可以看到数据库已经建立两部电影的相关节点

(2)创建person及其与movie的关系

 @Test
 public void testSavePerson() {
 Person p1 = new Person("章子怡", "1979");
 Person p2 = new Person("李芳芳", "1976");
 Person p3 = new Person("程耳", "1970");
 Movie m1 = movieRepo.findByTitle("罗曼蒂克消亡史");
 Movie m2 = movieRepo.findByTitle("无问西东");
 if (m1!=null) {
 p1.addActor(m1);
 p3.addDirector(m1);
 }
 if (m2!=null) {
 p1.addActor(m2);
 p2.addDirector(m2);
 }
 personRepo.save(p1);
 personRepo.save(p2);
 personRepo.save(p3);
 }

如图,测试用例已经建立起了电影与导演、演员之间的联系

(3)findMovieByTitle

 @Test
 public void testfindByTitle() {
 Movie movie = movieRepo.findByTitle("罗曼蒂克消亡史");
 }

查询出相应的结果符合预期

{
 "id":26,
 "title":"罗曼蒂克消亡史",
 "released":"2016"
}

(4)findPersonByName

 @Test
 public void testfindByName() {
 Person person = personRepo.findByName("章子怡");
 }

这里需注意的是,该演员对应了两部电影,查询个人信息的同时应该包含两部电影

{
 "id":27,
 "name":"章子怡",
 "born":"1979",
 "actors":[
 {
  "id":25,
  "title":"无问西东",
  "released":"2018"
 },
 {
  "id":26,
  "title":"罗曼蒂克消亡史",
  "released":"2016"
 }
 ]
}

查询结果也符合预期

还有很多findAll、delete就不在一一列举了,至此springBoot与neo4j的简单整合就完成了

demo源码点击下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springboot 整合 freemarker代码实例

    这篇文章主要介绍了springboot 整合 freemarker代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE&l

  • SpringBoot整合freemarker的讲解

    freemarker和thymeleaf是模板引擎.在早前我们使用Struts或者SpringMVC等框架的时候,使用的都是jsp,jsp的本质其实就是一个Servlet,其中的数据需要在后端进行渲染,然后再在客户端显示,效率比较低下.而模板引擎恰恰相反,其中的数据渲染是在客户端,效率方面比较理想一点.前后端不分离的话用模板引擎比较好,前后端分离的话其实用处并不大很大.Spring官方比较推荐的是thymeleaf,其文件后缀是html.本篇文章我们主要来看看SpringBoot整合freema

  • springboot整合freemarker详解

    前提: 开发工具:idea 框架:spring boot.maven 1.pom文件添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>1.4.1.RELEASE</version> </dependency>

  • SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    一.水平分割 1.水平分库 1).概念:  以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中. 2).结果  每个库的结构都一样:数据都不一样:  所有库的并集是全量数据: 2.水平分表 1).概念  以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中. 2).结果  每个表的结构都一样:数据都不一样:  所有表的并集是全量数据: 二.Shard-jdbc 中间件 1.架构图 2.特点 1).Sharding-JDBC直接封装JDBC API,旧代码迁移成本几乎为零. 2).适

  • SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

    网上杂七杂八的说法不一,大多数都是抄来抄去,没有实践,近期在项目频繁遇到boot+jackson处理日期的问题,故开此贴. 首先是POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

  • Spring Boot整合Redis的完整步骤

    前言 实际 开发 中 缓存 处理是必须的,不可能我们每次客户端去请求一次 服务器 ,服务器每次都要去 数据库 中进行查找,为什么要使用缓存?说到底是为了提高系统的运行速度.将用户频繁访问的内容存放在离用户最近,访问速度最 快的 地方,提高用户的响 应速度,今天先来讲下在 springboot 中整合 redis 的详细步骤. 一.Spring Boot对Redis的支持 Spring对Redis的支持是使用Spring Data Redis来实现的,一般使用Jedis或者lettuce(默认),

  • springboot整合solr的方法详解

    这一篇写一下springboot整合solr,代码已经上传到github,传送门. 1.新建core并配置schema solr create -c "book_core" ,配置分词器并且field类型定义为分词器类型. <fieldType name="ik_word" class="solr.TextField"> <analyzer type="index"> <tokenizer cla

  • SpringBoot整合Elasticsearch7.2.0的实现方法

    Spring boot 2.1.X整合Elasticsearch最新版的一处问题 新版本的Spring boot 2的spring-boot-starter-data-elasticsearch中支持的Elasticsearch版本是2.X,但Elasticsearch实际上已经发展到7.2.X版本了,为了更好的使用Elasticsearch的新特性,所以弃用了spring-boot-starter-data-elasticsearch依赖,而改为直接使用Spring-data-elastics

  • springBoot 与neo4j的简单整合示例

    Neo4j简介 Neo4j是基于java语言实现的世界领先的图形数据库, 是一个高性能的图形存储,具有成熟和强大的数据库所需的所有功能,如友好的查询语言(Cypher)和ACID事务.对于许多应用程序,与关系数据库相比,Neo4j提供了数量级的性能优势.主要应用于图检索和关系计算.其优点在于: 节点没上线(3.0以后去掉了限制) 扩展性很好,支持集群和企业版 数据ETL有丰富的工具支持,自带GUI 良好的WebUI 更加详细的介绍参考:https://neo4j.com/docs/getting

  • springboot与redis的简单整合实例

    前言 Redis是一个缓存.消息代理和功能丰富的键值存储.StringBoot提供了基本的自动配置.本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/ 前期准备 首先我们要有一个Redis服务,由于我没有Linux环境,为了方便搭建项目,直接在Windows下安装,参考这篇博客:Windows下安装Redis服务 安装步骤:一直

  • SpringMVC简单整合Angular2的示例

    本文介绍了SpringMVC简单整合Angular2的示例,分享给大家,具体如下: angular使用的是官方的快速开始的例子 将文件全部拷贝到springmvc的项目中,拷贝过程中可能出现文件路径太长而失败,那就先对整个文件压缩,然后拷贝压缩过后的文件,然后解压缩即可.目录结构如下,我是拷贝到angular目录下的 spring配置文件设置路径 然后再html页面中如angular官方所示,引入文件 这里面需要对这些文件的路径进行配置 主要是systemjs.config文件中需要修改两个地方

  • SpringBoot+MybatisPlus+代码生成器整合示例

    项目目录结构: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

  • Springboot几种任务的整合方法

    这篇文章主要介绍了Springboot几种任务的整合方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一 异步任务 启动类 @MapperScan("com.topcheer.*.*.dao") @SpringBootApplication @EnableCaching @EnableRabbit @EnableAsync public class Oss6Application { public static void main(

  • SpringBoot从0到1整合银联无跳转支付功能附源码

    前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容,下面案例可供参考 一.官网 https://open.unionpay.com/tjweb/user/mchTest/param 个人登录后的相关参数查看 其实在接入支付之前建议大家了解下 对称加密,分对称加密RSA之类,摘要算法,https,证书等这些知识点,因为此代码后面的验签,判断都是基于此的

  • Springboot项目与vue项目整合打包的实现方式

    我的环境 * JDK 1.8  * maven 3.6.0  * node环境 1.为什么需要前后端项目开发时分离,部署时合并? 在一些公司,部署实施人员的技术无法和互联网公司的运维团队相比,由于各种不定的环境也无法做到自动构建,容器化部署等.因此在这种情况下尽量减少部署时的服务软件需求,打出的包数量也尽量少.针对这种情况这里采用的在开发中做到前后端独立开发,打包时在后端springboot打包发布时将前端的构建输出一起打入,最后只需部署springboot的项目即可,无需再安装nginx服务器

  • SpringBoot获取配置文件的简单实现方法

    前言 在讲SpringBoot 获取配置文件之前我们需要对SpringBoot 的项目有一个整体的了解,如何创建SpringBoot 项目,项目结构等等知识点,我在这里就不一一讲述了,没有学过的小伙伴可以自己在网上找一些资料进行学习,很简单的. 下面让我们开始今天的内容讲解吧. 一.SpringBoot 全局配置文件的加载顺序 在SpringBoot 当中,全局配置文件有两种不同的格式,一个是我们常见的properties, 一种是yml. 这两种格式的文件其实也没什么太大的区别,使用的时候按照

  • SpringBoot如何添加WebSocket的方法示例

    一.WebSocket介绍 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等.按照以往的技术能力通常是采用轮询.Comet技术解决. HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据.当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器.这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数

  • springboot实现异步调用@Async的示例

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规的做法是使用多线程或线程池,需要额外编写代码实现.在spring3.0后引入了@Async注解,使用该注解可以达到线程池的执行效果,而且在开发上非常简单. 一.概述 springboot是基于spring框架的,在springboot环境下演示@Async注解的使用方式.先看下该注解的定义, @Ta

随机推荐