springboot集成neo4j

1创建一个springboot项目引入neo4j的依赖

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

2、配置文件设置连接neo4j的地址

# neo4j配置
spring.data.neo4j.uri= bolt://192.168.0.100:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=testpasswd

3、创建person的实体类和接口PersonRepository

package com.example.demo.entity;

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;

import java.io.Serializable;

//节点的标签类型
@NodeEntity(label = "person")
public class Person implements Serializable {

    //neo4j自动生成的id
    @Id
    @GeneratedValue
    private Long id;

    //节点的属性
    @Property
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

package com.example.demo.dao;

import com.example.demo.entity.Person;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PersonRepository  extends Neo4jRepository<Person,Long> {

    @Query("Match (p:person) return p")
    List<Person> findParentList();
}

4、创建RelatlionShip的关系类和接PersonRelatlionShipRepository

package com.example.demo.entity;

import org.neo4j.ogm.annotation.*;

import java.io.Serializable;

//关系实体  必须有起始节点和结束节点
@RelationshipEntity(type="personRelationShip")
public class RelatlionShip  implements Serializable {
    @Id
    @GeneratedValue
    private Long id;

    //起始节点
    @StartNode
    private Person startPerson;

    //结束节点
    @EndNode
    private Person endPerson;

    //属性
    @Property
    private String relation;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Person getStartPerson() {
        return startPerson;
    }

    public void setStartPerson(Person startPerson) {
        this.startPerson = startPerson;
    }

    public Person getEndPerson() {
        return endPerson;
    }

    public void setEndPerson(Person endPerson) {
        this.endPerson = endPerson;
    }

    public String getRelation() {
        return relation;
    }

    public void setRelation(String relation) {
        this.relation = relation;
    }
}

 

package com.example.demo.dao;


import com.example.demo.entity.RelatlionShip;

import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PersonRelatlionShipRepository extends Neo4jRepository<RelatlionShip,Long> {

    @Query("match (n:person {name:{0}}), (m:person {name:{2}})  create (n)-[:关系{relation:{1}}]->(m)")
    void createRelation(String from,String relation,String to);
}

5、创建测试类DemoApplicationTests

package com.example.demo;

import com.example.demo.dao.PersonRelatlionShipRepository;
import com.example.demo.dao.PersonRepository;
import com.example.demo.entity.Person;
import com.example.demo.entity.RelatlionShip;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import sun.print.PeekGraphics;

import java.util.List;
import java.util.Optional;

@SpringBootTest
class DemoApplicationTests {

@Autowired
PersonRepository personRepository;

@Autowired
PersonRelatlionShipRepository personRelatlionShipRepository;

@Test
void testFindById() {

//id查询
Optional<Person> person = personRepository.findById(54L);
System.out.println(person.get().getName());
//orElse函数的作用是如果表达式的结果为空值(null),则返回一个指定的默认值作为替代
person.orElse(null);
}

@Test
void testFindPersonList() {
List<Person> list = personRepository.findParentList();
for(Person person:list){
System.out.println(person.getName());
}
}

@Test
void testDeleteById() {
//id删除
personRepository.deleteById(2L);
}

@Test
void testCreateEntity() {
//增加节点
Person newPerson = new Person();
newPerson.setName("大侠");
personRepository.save(newPerson);
}

@Test
void testCreateRelation() {
//构建关系
Person father = new Person();
father.setName("爸爸");
personRepository.save(father);

Person child = new Person();
child.setName("child");
personRepository.save(child);

//创建关系
RelatlionShip relatlionShip = new RelatlionShip();
relatlionShip.setStartPerson(father);
relatlionShip.setEndPerson(child);
relatlionShip.setRelation("父子");
personRelatlionShipRepository.save(relatlionShip);

}

@Test
void testCreateRelationCql() {
personRelatlionShipRepository.createRelation("大侠","斩杀","李四");
}

@Test
void testDeleteRelationById() {
//id删除关系
personRelatlionShipRepository.deleteById(18L);
}

}

6、运行测试方法

<1>清空数据

MATCH (n)

DETACH DELETE n

 

<2>造数据演示数据

CREATE (p1:person{name:"张三"})

CREATE (p2:person{name:"李四"})

CREATE (p3:person{name:"王五"})

查看数据

MATCH (p:person)

return p

 

 

<3>演示根据id查找person的方法

运行结果:

<4>运行自己写的方法,返回所有person对象

运行结果

<5>创建一个person  大侠

运行后在neo4j里查询

<5>调用方法创建对象之间的联系

运行后查看结果:

<5>调用自己写的语句方法,创建关系

 

运行结果:

 源码获取方式(免费):

(1)登录-注册:http://resources.kittytiger.cn/

(2)签到获取积分

(3)搜索:it白话-springboot集成neo4j-源码

 

资源丰富的的网盘资源:网盘资源大全! 推荐一个适合零基础学习SQL的网站:不用安装数据库,在线轻松学习SQL!
posted @ 2024-03-06 10:54  万笑佛  阅读(2824)  评论(0)    收藏  举报