网站建设与维护工作待遇潍坊市安丘建设局网站
2026/2/21 22:04:01 网站建设 项目流程
网站建设与维护工作待遇,潍坊市安丘建设局网站,游戏logo设计网站,娱乐网站开发多少钱一. 前言 本文介绍如何通过SpringBoot整合Neo4j的方式#xff0c;对图数据库进行简单的操作。 Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识#xff0c;有兴趣可以看看作者上一篇的文章#xff1a;Neo4j图数据库学习(一)——初识CQL 二. 前置准备 新建SpringBo…一. 前言本文介绍如何通过SpringBoot整合Neo4j的方式对图数据库进行简单的操作。Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识有兴趣可以看看作者上一篇的文章Neo4j图数据库学习(一)——初识CQL二. 前置准备新建SpringBoot项目首先新建一个SpringBoot项目注意JDK与Java版本需要与你的Neo4j版本相匹配。接着添加依赖项这里添加了Lombok与SpringDataNeo4jLombok可以使用Data注解为实体类快速生成get()、set()等方法。我选择使用的SpringBoot版本在2.4以下如果版本较高集成的Neo4j的API规则方法变化较大。properties配置文件在properties中配置Neo4j的连接信息#Neo4j配置 spring.data.neo4j.uri bolt://localhost:7687 spring.data.neo4j.username neo4j spring.data.neo4j.password 123456假如有修改过密码记得将初始密码替换为自己设置的密码。至此前置的准备已经基本完毕。三. 查询我们知道启动Neo4j后可以在浏览器中对数据库进行操作那么在SpringBoot中我们如何进行操作呢我们接着以小猪佩奇的案例进行分析。我们需要有小猪佩奇的实体类所以创建一个Pig类代码如下:使用NodeEntity注解定义节点模型。package com.tuling.lowversionneo4j.entity; import lombok.Data; 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; Data NodeEntity(label pig) public class Pig implements Serializable { Id GeneratedValue private Long id; Property private String name; }使用spring-data-neo4j提供的Neo4jRepository接口来创建数据访问层可以使用Repository注解。package com.tuling.lowversionneo4j.dao; import com.tuling.lowversionneo4j.entity.Pig; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; Repository public interface PigReponsitory extends Neo4jRepositoryPig,Long { }此时如果我们要查询id为2的成员信息我们可以使用Autowired进行依赖注入接着使用pigReponsitory调用相关方法进行操作。这里使用测试类进行简单演示后续代码同样package com.tuling.lowversionneo4j; import com.tuling.lowversionneo4j.dao.PigReponsitory; import com.tuling.lowversionneo4j.entity.Pig; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Optional; SpringBootTest class LowVersionNeo4jApplicationTests { Autowired PigReponsitory pigReponsitory; Test void test() { OptionalPig byId pigReponsitory.findById(2L); //注意此处传入的数据类型为Long Pig pig byId.get(); System.out.println(pig); } }运行测试在控制台中得到输出结果。可以看出id为2的家庭成员为佩奇。四. 删除同样地我们也可以使用pigReponsitory调用方法进行其他操作。如使用deleteById()方法根据Id进行删除。我们以删除id为5的节点为例代码如下pigReponsitory.deleteById(5L); //注意此处传入的数据类型为Long运行测试类回到浏览器页面可以发现id为5的节点猪爷爷已被删除。删除后pigReponsitory可以调用其他方法来进行其他操作在这里不多赘述有兴趣可以自己研究。五. 添加添加节点如果我们想要添加节点该如何操作同样地我们可以通过pigReponsitory调用方法来实现。如下方代码所示我们创建两个pig对象并设置name属性最后通过调用save()方法来添加节点。Pig pig1 new Pig(); pig1.setName(猪爷爷); Pig pig2 new Pig(); pig2.setName(猪奶奶); pigReponsitory.save(pig1); pigReponsitory.save(pig2);添加关系新建PigRelationShip和PigRelationShipRepository的方法这是一种较为复杂的方法。与创建PigReponsitory、Pig同理我们在entity中创建PigRelationShip:package com.tuling.lowversionneo4j.dao; import com.tuling.lowversionneo4j.entity.PigRelationShip; import org.springframework.data.neo4j.repository.Neo4jRepository; public interface PigRelationShipRepository extends Neo4jRepositoryPigRelationShip,Long { }在dao中创建PigRelationShipRepository使用StartNode和EndNode注解设置起始节点和结束节点。package com.tuling.lowversionneo4j.entity; import lombok.Data; import org.neo4j.ogm.annotation.*; import java.io.Serializable; Data RelationshipEntity(type 夫妻) public class PigRelationShip implements Serializable { Id GeneratedValue private Long id; StartNode private Pig start; EndNode private Pig end; Property private String relation; }在测试类中进行测试PigRelationShip ship new PigRelationShip(); ship.setStart(pig1); ship.setEnd(pig2); ship.setRelation(夫妻); pigRelationShipRepository.save(ship);最终成功创建关系使用Query注解刚才提到的方法是较为繁琐的spring-data-neo4j为我们提供了快捷的注解——Query在PigReponsitory中我们使用Query注解简化添加关系操作在Query()中编写CQL语句与MyBatis有些相似。//上方内容省略 Repository public interface PigReponsitory extends Neo4jRepositoryPig,Long { Query(match(n:pig{name:$from}) match(m:pig{name:$to}) create (n) -[:小猪佩奇家庭关系{relation:$relation}] - (m)) void createRelation(Param(valuefrom)String from, Param(valuerelation)String relation, Param(valueto)String to); }测试类中的代码pigReponsitory.createRelation(猪爷爷,夫妻, 猪奶奶);在这里作者也有一个问题就是只有使用$name和Param才能正常替换字符串内容否则会报语法错误而似乎有人使用{}与参数序号的方式可以成功实现。Repository public interface PigReponsitory extends Neo4jRepositoryPig,Long { Query(match(n:pig{name:{0}}) match(m:pig{name:{2}}) create (n) -[:小猪佩奇家庭关系{relation:{1}}] - (m)) void createRelation(String from, String relation, String to); }作者无法使用这种方法实现不知为何有知道的可以指导指导作者感激不尽六. 最后由于作者的水平非常有限难免会出现错误欢迎各位指正假如您有任何想法也欢迎交流

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询