Linux系统安装neo4j,整合springboot以及常用语法整理

一、安装Neo4j

1.下载安装包

地址: https://neo4j.com/download/other-releases/#releases(社区版免费)
或者在线安装:
curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gz

在docker内部部署:
docker run --publish=7474:7474 --publish=7687:7687 neo4j:4.2.1

请注意最低版本兼容性:
Neo4j Server 3.x-Java 8
Neo4j Server 4.x-Java 11

2.解压安装

tar -axvf neo4j-community-3.4.5-unix.tar.gz

3.修改配置文件

在安装目录下找到conf目录下的neo4j.conf文件

# 修改第22行load csv时l路径,在前面加个#,可从任意路径读取文件
#dbms.directories.import=import

# 修改35行和36行,设置JVM初始堆内存和JVM最大堆内存
# 生产环境给的JVM最大堆内存越大越好,但是要小于机器的物理内存
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=10g

# 修改46行,可以认为这个是缓存,如果机器配置高,这个越大越好
dbms.memory.pagecache.size=10g

# 修改54行,去掉改行的#,可以远程通过ip访问neo4j数据库
dbms.connectors.default_listen_address=0.0.0.0

# 默认 bolt端口是7687,http端口是7474,https关口是7473,不修改下面3项也可以
# 修改71行,去掉#,设置http端口为7687,端口可以自定义,只要不和其他端口冲突就行
#dbms.connector.bolt.listen_address=:7687

# 修改75行,去掉#,设置http端口为7474,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.http.listen_address=:7474

# 修改79行,去掉#,设置http端口为7473,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.https.listen_address=:7473

# 修改227行,去掉#,允许从远程url来load csv
dbms.security.allow_csv_import_from_file_urls=true

# 修改246行,允许使用neo4j-shell,类似于mysql 命令行之类的
dbms.shell.enabled=true

# 修改235行,去掉#,设置连接neo4j-shell的端口,一般都是localhost或者127.0.0.1,这样安全,其他地址的话,一般使用https就行
dbms.shell.host=127.0.0.1

# 修改250行,去掉#,设置neo4j-shell端口,端口可以自定义,只要不和其他端口冲突就行
dbms.shell.port=1337

# 修改254行,设置neo4j可读可写
dbms.read_only=false

4.启动

进入bin目录执行./neo4j start

5:停止

进入bin目录执行./neo4j stop

6:查看图数据库状态

进入bin目录执行./neo4j status

7:客户端访问

http://服务器ip地址:7474/browser/

在浏览器访问图数据库所在的机器上的7474端口(第一次访问账号neo4j,密码neo4j,会提示修改初始密码)
在这里插入图片描述

若部署成功且neo4j已经处于运行状态,页面无法访问时,需放行端口

二、springboot 整合neo4j

1、添加pom依赖

<neo4j-ogm.version>2.1.5</neo4j-ogm.version>
<!-- neo4j相关所需jar包 -->
        <dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-data-neo4j</artifactId>
		</dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-core</artifactId>
            <version>${neo4j-ogm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-bolt-driver</artifactId>
            <version>${neo4j-ogm.version}</version>
        </dependency>
        <dependency>
			<groupId>org.neo4j</groupId>
			<artifactId>neo4j-ogm-embedded-driver</artifactId>
			<version>${neo4j-ogm.version}</version>
		</dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j</artifactId>
            <version>3.2.5</version>
            <scope>runtime</scope>
        </dependency>

2.实体bean

package com.demo.neo4j.entity;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.voodoodyne.jackson.jsog.JSOGGenerator;
import lombok.Data;
import org.neo4j.ogm.annotation.*;
import java.util.HashSet;
import java.util.Set;



/**
 * @Author: yuf
 * @Date: 2021/3/30 10:39
 * @Description:
 */

@JsonIdentityInfo(generator= JSOGGenerator.class)
@NodeEntity(label = "User")
@Data
public class UserNode {

    @Id
    @GeneratedValue
    private Long nodeId;

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

    @Property(name = "age")
    private int age;

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

    **/*注意这个地方:并不是说加了这个注解,然后下面实现了addKnows这个方法在以后调用addKnows 就可以实现关系的增加,这是不对的,我看了很多教程没有说明。这个addKnows方法,只有在节点未被添加之前,调用该方法添加关系,然后再调用UserService中的create方法,这样关系才会同时被添加到图数据库中。如果想实现两个已有节点之间增加关系,需要单独实现*/**
    @Relationship(type = "know" ,direction = Relationship.OUTGOING)
    private Set<UserNode> knows = new HashSet<>();

    public Boolean addKnows(UserNode to){
        return this.knows.add(to);
    }

    @Override
    public String toString() {
        return "UserNode{" +
                "nodeId=" + nodeId +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';

    }

    public UserNode() {}


}

3、Neo4jRepository提供常用操作,实体Mapper集成即可

三、Neo4j语法

@Node:在类级别应用,以指示该类是映射到数据库的候选对象。

@Id:在字段级别应用,以标记用于标识目的的字段。

@GeneratedValue:与字段一起应用,@Id以指定应如何生成唯一标识符。

@Property:在字段级别应用,以修改从属性到属性的映射。

@CompositeProperty:在字段级别应用于Map类型的属性,这些属性应作为组合读回。请参阅复合属性。

@Relationship:在字段级别应用,以指定关系的详细信息。

@DynamicLabels:在字段级别应用,以指定动态标签的来源。

@RelationshipProperties:在类级别应用,以表示该类为关系属性的目标。

@TargetNode:@RelationshipProperties从另一端的角度来看,应用于带有注释的类的字段上,以标记该关系的目标。

以下注释用于指定转换并确保与OGM的向后兼容性。

@DateLong

@DateString

@ConvertWith

1、添加5个人名节点,名字分别为

CREATE (:People{name:"John"})
CREATE (:People{name:"Joe"}) 
CREATE (:People{name:"Sara"}) 
CREATE (:People{name:"Steve"}) 
CREATE (:People{name:"Maria"})

2、创建节点、添加关系进行查询操作结果:

match (people:People) return people

3、给这5个人添加上朋友关系

MATCH (a:People{name:"John"}) MATCH (b:People{name:"Joe"}) CREATE (a) -[:friend]->(b)
MATCH (a:People{name:"John"}) MATCH (b:People{name:"Sara"}) CREATE (a) -[:friend]->(b)
MATCH (a:People{name:"Joe"}) MATCH (b:People{name:"Steve"}) CREATE (a) -[:friend]->(b)
MATCH (a:People{name:"Sara"}) MATCH (b:People{name:"Maria"}) CREATE (a) -[:friend]->(b)

4、再次查询

match (people:People) return people

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值