百度百科:  
  Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.
查询语句:
  不是SQL,而是Cypher
Cypher关键点
  • () 表示节点
  • [] 表示关系
  • {} 表示属性
  • > 表示关系的方向

示例:

//查询a的一个叫duchong的朋友
match (a)-[:Friend]->b
where b.name ='duchong'
return b

一、安装Neo4j

社区版下载地址:

https://neo4j.com/artifact.php?name=neo4j-community-3.4.10-windows.zip

配置环境变量

NEO4J_HOME

Path
%NEO4J_HOME%\bin


配置完成,cmd

neo4j.bat console


启动完成 浏览器访问地址为:
localhost:7474
初始用户名和密码均为neo4j

二、springboot整合

添加依赖

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

properties配置

#neo4j
spring.data.neo4j.uri=http://localhost:7474
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123qwe

User节点

package com.dc.sb.web.neo4j;

import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property; /**
* 节点实体类型-别名为User
* @author DUCHONG
* @since 2018-12-17 11:32
**/
@NodeEntity(label = "User")
public class UserNode {
//图形id
@GraphId
private Long nodeId;
//属性
@Property
private String userId;
//属性
@Property
private String userName;
//属性
@Property
private int age; public Long getNodeId() {
return nodeId;
} public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
} public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

UserRelation节点

package com.dc.sb.web.neo4j;

import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode; /**
* 关系节点类型
* @author DUCHONG
* @since 2018-12-17 11:39
**/
@RelationshipEntity(type = "UserRelation")
public class UserRelation { @GraphId
private Long id;
//开始节点
@StartNode
private UserNode startNode;
//结束节点
@EndNode
private EndNode endNode; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public UserNode getStartNode() {
return startNode;
} public void setStartNode(UserNode startNode) {
this.startNode = startNode;
} public EndNode getEndNode() {
return endNode;
} public void setEndNode(EndNode endNode) {
this.endNode = endNode;
}
}

UserRepository

package com.dc.sb.web.neo4j.dao;

import com.dc.sb.web.neo4j.UserNode;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component; import java.util.List; /**
* @author DUCHONG
* @since 2018-12-17 11:42
**/
@Component
public interface UserRepository extends GraphRepository<UserNode> { @Query("MATCH (n: User) RETURN n")
List<UserNode> getUserNodeList(); @Query("CREATE (n: User{age:{age},userName:{userName}}) RETURN n")
List<UserNode> addUserNodeList(@Param("userName") String userName, @Param("age") int age); }

UserReloationReposiroty

package com.dc.sb.web.neo4j.dao;

import com.dc.sb.web.neo4j.UserRelation;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component; import java.util.List; /**
* 用户关系DO
* @author DUCHONG
* @since 2018-12-17 13:53
**/
@Component
public interface UserRelationRepository extends GraphRepository<UserRelation> { @Query("match p= (n:User)<- [r: UserRelation]-> (n1:User) wheren.userId=(firstUserId) and n1.userId =(secondUserId) return p")
List<UserRelation> findUserRelationByEachId (@Param(" firstUserId") String firstUserId, @Param ("secondUserId") String secondUserId) ; @Query ("match(fu:User) ,(su:User) where fu. userId=[firstUserId]and su.userId=[ secondUserId, create p= (fu)- [r:UserRelation]-> (su) return p") List<UserRelation> addUserRelation (@Param(" firstUserId") String firstUserId, @Param("secondUserId") String secondUserId) ;
}

Service

package com.dc.sb.web.neo4j.service;

import com.dc.sb.web.neo4j.UserNode;
import com.dc.sb.web.neo4j.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* @author DUCHONG
* @since 2018-12-17 14:02
**/
@Service
public class Neo4jUserService { @Autowired
private UserRepository userRepository; public void addUserNode(UserNode userNode){ userRepository.addUserNodeList(userNode.getUserName(),userNode.getAge());
}
}

Controller

package com.dc.sb.web.neo4j.controller;

import com.dc.sb.web.neo4j.UserNode;
import com.dc.sb.web.neo4j.service.Neo4jUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author DUCHONG
* @since 2018-12-17 14:14
**/
@RestController
public class Neo4jController { @Autowired
private Neo4jUserService userService; @RequestMapping("/addUserNode")
public String addUserNode(){ UserNode userNode=new UserNode();
userNode.setUserName("duchong");
userNode.setAge(20); userService.addUserNode(userNode); return "add success ";
}
}

浏览器访问localhost:8080/addUserNode

查看Neo4j 数据库

完整代码已托管到GitHub ---》欢迎fork

springboot整合图像数据库Neo4j的更多相关文章

  1. 凭借SpringBoot整合Neo4j,我理清了《雷神》中错综复杂的人物关系

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 虽然距离中秋放假还要熬过漫长的两天,不过也有个好消息,今天是<雷神4>上线Disney+流媒体的日子 ...

  2. springboot整合springdata-jpa

    1.简介  SpringData : Spring 的一个子项目.用于简化数据库访问,支持NoSQL 和 关系数据存储.其主要目标是使数据库的访问变得方便快捷. SpringData 项目所支持 No ...

  3. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

  4. spring-boot整合mybatis(1)

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...

  5. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  6. springboot整合mq接收消息队列

    继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...

  7. springboot整合mybaits注解开发

    springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...

  8. SpringBoot整合Redis、ApachSolr和SpringSession

    SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...

  9. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

随机推荐

  1. 兄弟ifream的方法调用

    兄弟ifream A var ifreamId = window.frameElement && window.frameElement.id || ''; var url = 'ur ...

  2. windows下memcached安装以及php_memcache.dll扩展

    http://kimi.it/258.html http://kimi.it/259.html https://www.cnblogs.com/elenaPeng/p/6877530.html htt ...

  3. New Concept English three (42)

    21 33 Cave exploration, or pot-holing, as it has come to be known, is a relatively new sport. Perhap ...

  4. TCP服务器端口数,最大连接数以及MaxUserPort的关系辨真

    原文连接:http://www.jianshu.com/p/4a58761d758f 关于TCP服务器最大并发连接数有一种误解就是"因为端口号上限为65535,所以TCP服务器理论上的可承载 ...

  5. [EMWIN]FRAMEWIN 与 WINDOW 的使用注意

    1.对于window控件,选中这类型控件的时候直接选中对应句柄即可: WM_InvalidateWindow(hWin); WM_SelectWindow(hWin); WM_CreateTimer( ...

  6. 瀑布流下滑 发送ajax

    <!DOCTYPE=html>      <html>      <head>      <meta charset="UTF-8"> ...

  7. 【如何入门ACM】

    第一阶段:先刷水题,水题,就是几乎不牵扯算法.需要自己想方法解决.这样的题,一是锻炼逻辑和思维的严谨,二是锻炼代码能力.一般做到60-200题左右. 第二阶段:渐渐的学一些简单的算法,或者专题训练,或 ...

  8. Microsoft office2007免费版下载(安装 + 破解)

    office2007官方下载 免费完整版是微软推出的办公软件,office2007使用方法很简单,解压软件之后,运行“setup.exe”之后按照提示点击下一步,输入产品秘钥,就可以正常安装了.Mic ...

  9. ACM学习历程—计蒜客15 单独的数字(位运算)

    http://nanti.jisuanke.com/t/15 题目要求是求出只出现一次的数字,其余数字均出现三次. 之前有过一个题是其余数字出现两次,那么就是全部亦或起来就得到答案. 这题有些不太一样 ...

  10. Hadoop(二)自定义输出

    Hadoop提供了较为丰富的数据输入输出格式,可以满足很多的设计实现,但是在某些时候需要自定义输入输出格式. 数据的输入格式用于描述MapReduce作业的数据输入规范,MapReduce框架依靠 数 ...