(零基础学习)Neo4j+Spring boot 自行定义属性

前置知识

1.Neo4j :属性

节点和关系都可以设置自己的属性。 属性是由Key-Value键值对组成,键名是字符串。属性值是要么是原始值,要么是原始值类型的一个数组。比如+String+,+int+和i+int\[\]+都是合法的。

注意
null不是一个合法的属性值。 Nulls能代替模仿一个不存在的Key 。

.../_images/image3.9.png

属性值类型

bash 复制代码
Type	Description	Value range
boolean	true/false	 
byte	8-bit integer	-128 to 127, inclusive
short	16-bit integer	-32768 to 32767, inclusive
int	32-bit integer	-2147483648 to 2147483647, inclusive
long	64-bit integer	-9223372036854775808 to 9223372036854775807, inclusive
float	32-bit IEEE 754 floating-point number	 
double	64-bit IEEE 754 floating-point number	 
char	16-bit unsigned integers representing Unicode characters	u0000 to uffff (0 to 65535)
String	sequence of Unicode characters	 
如果要了解float/double类型的更多细节,请参考:Java Language Specification。

2.Cypher语法

本人Cypher语法 同样小白 仅分享(有不正确的地方请包涵)
neo4j 中文网

节点操作

创建节点

创建一个标签为zhan的节点 (标签:将数据进行分类,方便管理)

复制代码
create(n:zhan);// 这里的n就是随便起的一个变量名,代指当前实体或者关系。

创建一个标签为zhan 且带有属性值的节点

复制代码
create(n:zhan{id:1,name:'小明',age:20});
查询节点

按照标签查询

复制代码
match (n:zhan) return n; 

按照id进行查询

复制代码
match (n:zhan) where id(n) = 38023 return n;

多属性条件查询

复制代码
match (n:zhan) where n.name = '小明'and n.age = 20 and n.id = 1 return n;

添加多标签

复制代码
match (n:zhan) where id(n) = 38023 set n:zhan1 return n;
match (n:zhan) where id(n) = 38023 set n:zhan2 return n;

移除标签

复制代码
match (n:zhan) where id(n) = 38023 remove n:zhan2 return n;
match (n:zhan) where id(n) = 38023 remove n:zhan1 return n;

修改属性

复制代码
match (n:zhan) where n.name='小明' set n.name = '小红' return n;

match (n:zhan) where n.name='小明' set n.name = '小红' set n.age = '200'  return n;

删除实体

复制代码
match (n:zhan) where n.name = '小王' delete n;

相信 已发现 规律 * ------ *

关系操作

新建关系和实体

复制代码
1. 无实体
create (n:zhan{name:'小张'})-[r:test] -> (m:zhan{name:'小李'})
create (n:zhan{name:'小黄'})-[r:test{name:'夫妻'}] -> (m:zhan{name:'小八'})
2.有实体
match (n:zhan),(m:zhan) where n.name = '小李' and m.name = '小八' 
create (n)-[r:test{name:'儿子'}]->(m) ;

修改属性

复制代码
match p = (n)-[r:test]->(m) where r.name='朋友' set r.name='闺蜜' return p;

关系添加属性

复制代码
match p = (n)-[r:test]->(m) where r.name='闺蜜' set r.color='红色' return p;

删除关系

复制代码
match (n)-[r:relation]->(m) where r.name = '闺蜜' delete r;

修改标签

【注意】neo4j是不支持修改关系标签

修改标签的操作是重新创建一个关系删除原关系

复制代码
MATCH (n)-[r:test]->(m) where r.name='闺蜜'  #搜出来想要修改的关系
CREATE (n)-[r2:relation]->(m)  # 新建关系
SET r2 = r   # copy原属性
DELETE r # 删除

高级搜索 ...

3.Spring boot ,Maven 基本知识

Neo4j + Java api

1.Maven

【注意】:Spring boot 版本 2.2 以上

html 复制代码
<!--        neo4j-->
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
        </dependency>
<!--        spring neo4j-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
2.application.yml
java 复制代码
neo4j:
      uri: bolt://******:***
      username: neo4j
      password: ''
3.Node 类
4.关系类
java 复制代码
@RelationshipEntity //表示关系类型
@Data //get set
@AllArgsConstructor//会生成一个包含所有变量的构造方法,默认生成的方法是 public 的
@NoArgsConstructor // 生成一个无参数的构造方法
public class KnowledgePointsRelation {
    @Id
    @GeneratedValue
    private Long id;
    private Date createTime;
    private String name;

    /**
     *  起始节点的实体
     */
    @StartNode
    private KnowledgePointsNose KnowledgePointsFrom;
    /**
     * 终止节点的实体
     */
    @EndNode
    private KnowledgePointsNose  KnowledgePointsTo;

    public KnowledgePointsRelation(KnowledgePointsNose KnowledgePointsFrom,KnowledgePointsNose KnowledgePointsTo,String name){
        this.KnowledgePointsFrom=KnowledgePointsFrom;
        this.KnowledgePointsTo=KnowledgePointsTo;
        this.name=name;
    }
}
Repository层
java 复制代码
public interface KnowledgePointsNoseRepository extends Neo4jRepository<KnowledgePointsNose,Long> {
}
java 复制代码
public interface KnowledgePointsRelationRepository extends Neo4jRepository<KnowledgePointsRelation,Long> {
}

同样:

neo4j 结合现有方法

java 复制代码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    Optional<T> findById(ID var1);

    boolean existsById(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterable<? extends T> var1);

    void deleteAll();
}
Test(测试新增)
java 复制代码
        CustomerNode customerNode=new CustomerNode();
        customerNode.setName(name);
        customerNode.setAge(age);
        customerRepository.save(customerNode);
        CustomerNode customerNodeTo=customerRepository.findByName(nameTo);
        if(customerNodeTo !=null){
            CustomerRelation customerRelation=new CustomerRelation(customerNode,customerNodeTo,remark);
            customerRelationRepository.save(customerRelation);
        }
相关推荐
小荷才露尖尖角,早有蜻蜓立上头3 小时前
SpringBoot+QQ邮箱发送邮件
spring boot
蒸蒸yyyyzwd4 小时前
从邓明学习的后端笔记
笔记·学习
机器学习之心5 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
头发还在的女程序员5 小时前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案
java·vue.js·spring boot·租房小程序·租房系统·租房软件
FYKJ_20105 小时前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计
java·javascript·vue.js·spring boot·django·php·课程设计
Rabitebla17 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件18 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿18 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石19 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖21 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习