Spring Boot整合Neo4j

本文介绍Neo4j,一款高性能、开源的图形数据库。详细讲解了其安装配置过程,包括下载、安装、验证及SpringBoot项目的整合。通过示例展示了如何在SpringBoot中使用Neo4j进行数据存储和关系管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Neo4j

简介

Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。本教程将教你Neo4j的基础知识,Java与Neo4j和Spring DATA与Neo4j。 Neo4j是一个高性能的,NOSQL数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事物特性的java持久化引擎。Neo4j也可以看作是一个高性能的图引擎,该引擎具有成熟数据库所有特性。
在属性图中,图由顶点(节点),边(关系),属性组成,每个顶点和边都可以有一个或多个属性,Neo4j创建的图是用顶点和边构建的有向图。
官方网站:http://www.neo4j.org

示例图如下:
在这里插入图片描述

下载安装

去官方网站下载对应的版本,本人使用centos7

[root@zookeeper neo4j]# wget https://neo4j.com/artifact.php?name=neo4j-community-3.4.9-unix.tar.gz
--2020-06-27 09:30:30--  https://neo4j.com/artifact.php?name=neo4j-community-3.4.9-unix.tar.gz
正在解析主机 neo4j.com (neo4j.com)... 54.156.129.200, 3.222.79.195
正在连接 neo4j.com (neo4j.com)|54.156.129.200|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:91186069 (87M) [application/x-gzip]
正在保存至: “artifact.php?name=neo4j-community-3.4.9-unix.tar.gz”

100%[=======================================================================================>] 91,186,069   575KB/s 用时 2m 37s 

2020-06-27 09:33:24 (569 KB/s) - 已保存 “artifact.php?name=neo4j-community-3.4.9-unix.tar.gz” [91186069/91186069])

下载成功后进行解压操作,解压后修改安装目录下的neo4j.conf文件:
因为需要远程登录,所以只是调整了里面的一行,将注释放开:

dbms.connectors.default_listen_address=0.0.0.0

修改防火墙设置,开放端口并重启防火墙服务:
在这里插入图片描述

验证

在浏览器中输入:http://ip:7474/browser/,如果出现下图则证明安装成功,按照提示修改新密码,进行一些必要操作,也可以参照菜鸟教程进行简单练习:

在这里插入图片描述

Spring Boot整合Neo4j

源码地址

导入依赖修改配置

pom.xml

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
            <version>2.3.1.RELEASE</version>
        </dependency>

application.properties

# 配置neo4j相关信息
spring.data.neo4j.uri=bolt://192.168.1.106:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=wangfeng

开发配置类

Neo4jConfig.java用以加载驱动以及配置连接到neo4j的各种信息,以及指定repository。

@Configuration
@EnableTransactionManagement
@EnableNeo4jRepositories(basePackages = "com.neo4jdemo.springbootneo4j.repository")
public class Neo4jConfig {
    @Value("${spring.data.neo4j.uri}")
    private String url;

    @Value("${spring.data.neo4j.username}")
    private String username;

    @Value("${spring.data.neo4j.password}")
    private String password;

    @Bean(name = "session")
    public Session neo4jSession() {
        Driver driver = GraphDatabase.driver(url, AuthTokens.basic(username, password));
        return driver.session();
    }

}

开发实体以及关系类

ParentNode.java 需要在类中指定对应的Node,以及关系

@NodeEntity("ParentNode")
public class ParentNode {

    @Id
    @GeneratedValue
    private Long id;
    private  @Property(name = "name") String name;

    private @Relationship(type = "Relations")
    Set<RelationNode> sets = new HashSet<>();
   //get set toString 构造器等
    //添加关系
     public void addRelation(SonNode sonNode, String name) {
        RelationNode relationNode = new RelationNode(this, name, sonNode);
        sets.add(relationNode);
        sonNode.getSets().add(relationNode);
    }

SonNode.java

@NodeEntity("SonNode")
public class SonNode {
    @Id
    @GeneratedValue
    private Long id;

    @Property(name = "name")
    private String name;

    private @Relationship(type = "RelationEdge", direction = "INCOMING")
    Set<RelationNode> sets = new HashSet<>();

     //get set toString 构造器等
 }

RelationNode.java 需要指定关系名,关系箭头指向

@RelationshipEntity(type = "Relations")
public class RelationNode {
    @Id
    @GeneratedValue
    private Long id;
    // 关系名
    private String name;
    private @StartNode
    ParentNode parentNode;
    private @EndNode
    SonNode sonNode;
    
  //get set toString 构造器等
}

Neo4jParentRepository

Neo4jParentRepository.java继承自Neo4jRepository,实现简单的crud操作

public interface Neo4jParentRepository extends Neo4jRepository<ParentNode,Long> {
}

测试验证接口开发

Neo4jController.java

@RestController
@RequestMapping("/neo4j")
public class Neo4jController {

    @Autowired
    private Neo4jParentRepository neo4jParentRepository;

    @GetMapping("/create")
    public void create(){
        SonNode sonNode1 = new SonNode("儿子小峰");
        SonNode sonNode2 = new SonNode("女儿小丽");

        ParentNode parentNode = new ParentNode("爸爸");

        parentNode.addRelation(sonNode2, "女儿");
        parentNode.addRelation(sonNode1, "儿子");

        neo4jParentRepository.save(parentNode);
    }


    @GetMapping(value = "/query")
    public void findNodes() {
        Iterable<ParentNode> parentNodes = neo4jParentRepository.findAll();
        for (ParentNode parentNode : parentNodes) {
            Set<RelationNode> relationNodeSet = parentNode.getSets();
            for (RelationNode relationNode : relationNodeSet) {
                System.out.println("id:" + parentNode.getId() + " name:" + parentNode.getName() + " 关系:" + relationNode.getName() + "子节点:" + relationNode.getSonNode().getName());
            }
        }
    }

}

使用启动类开启项目,然后使用postman对接口create和query分别进行访问,项目没有报错的情况下,可以直接登录图数据库的可视化界面去查看,能看到关系已经生成。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值