Neo4j官方建议Spring Boot 2.4.及以上版本用Neo4j Java Driver代替The Spring Boot starter

SpringBoot2.*使用Neo4j

起因

其实网上有很多关于SpringBoot集成Neo4j的例子,但是二者结合的方法规则几乎每年都在变,比如org.springframework.data.neo4j.core.schema中没有@NodeEntity,@StartNode,@EndNode等注解,所以网上的一些样例放到现在是行不通的
目前,我在用SpringBoot(Version:2.6.4)集成Neo4j时,遇到了一些问题,也在CSDN上发布了这些问题:
问题1:
springboot集合neo4j引用了org.neo4j的包,报错Required identifier property not found for class
问题2:
用SpringBoot集成neo4j,查询报错Could not find mappable nodes or relationships inside Record

但是没有得到回复。我就去翻了Neo4j官方文档

Neo4j官方文档

Neo4j Java Driver Spring Boot Starter.

进入上面的链接,可以明确看到The Spring Boot starter is now superseded by the Neo4j Java Driver auto config starting with Spring Boot 2.4. For Spring Boot 2.3. we will still provide support with this starter.
The Spring Boot starter is now superseded by the Neo4j Java Driver auto config starting with Spring Boot 2.4. For Spring Boot 2.3. we will still provide support with this starter.
也就是说从Spring Boot 2.4.开始,将用Neo4j Java Driver自动配置取代The Spring Boot starter;但对于Spring Boot 2.3.仍将提供starter的支持

在SpingBoot中使用Neo4j Java Driver

pom.xml依赖

不建议添加Spring Boot starter依赖这样使用Neo4j

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

而是使用neo4j-java-driver-spring-boot-starter的依赖(我这里引入的是4.3.6.0版本的)

<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver-spring-boot-starter</artifactId>
    <version>4.3.6.0</version> 
</dependency>

代码样例

官方文档中给出了一段代码样例来说明具体怎么使用Neo4j Java Driver的

package com.example.demo;

import java.util.List;

import org.neo4j.driver.AccessMode;
import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.neo4j.driver.SessionConfig;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MoviesController {

	private final Driver driver; 

	public MoviesController(Driver driver) { 
		this.driver = driver;
	}

	@GetMapping(path = "/movies", produces = MediaType.APPLICATION_JSON_VALUE) 
	public List<String> getMovieTitles() {

		try (Session session = driver.session()) { 
			return session.run("MATCH (m:Movie) RETURN m ORDER BY m.name ASC")
				.list(r -> r.get("m").asNode().get("title").asString());
		}
	}
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐