首页 > 数据库 > > spring-boot集成neo4j
此demo依赖的spring-boot版本为:2.1.12.RELEASE
运行环境:
JDK:1.8及以上
neo4j:3.5.5版本,4.0版本要求必须jdk11了
项目管理:maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-http-driver</artifactId>
<version>3.2.1</version>
</dependency>application.properties 配置如下:
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=0000
spring.data.neo4j.uri=http://127.0.0.1:7474movie实体的定义如下
package com.example.neo4j.neo4jdemo.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;
/**
* @date 2020/1/21 3:42 PM
**/
@NodeEntity(label = "movie")
@Data
public class Movie {
@Id
@GeneratedValue
Long id;
@Property("movie_id")
String movieId;
@Property("movie_title")
String movieTitle;
@Property("movie_release_date")
String movieReleaseDate;
@Property("movie_introduction")
String movieIntroduction;
@Property("movie_rating")
String movieRating;
}
@NodeEntity:声明该类为Neo4j的节点类
movie的仓库类定义
package com.example.neo4j.neo4jdemo.repository;
import com.example.neo4j.neo4jdemo.entity.Movie;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
* @date 2020/1/21 3:55 PM
**/
public interface MovieRepository extends Neo4jRepository<Movie,Long> {
/**
* CQL语法
* @param name
* @return
*/
@Query("match (p:person{person_name:{name}})-[a:ACTED_IN]->(m:movie) return m")
public List<Movie> findByPerson(@Param("name") String name);
@Query("match (p:person{person_name:{name}})-[a:ACTED_IN]->(m:movie) return count(m) as count")
public Integer findCountByPerson(@Param("name") String name);
@Query("create (m:movie{id:{id},movie_id:{movieId},movie_title:{movieTitle},movie_introduction:{movieIntroduction}}) return m")
public Movie saveMovie(@Param("id") Long id, @Param("movieTitle") String movieTitle, @Param("movieId") String movieId, @Param("movieIntroduction") String movieIntroduction);
}这里的demo省了service层,controller直接操作了repository层,进行movie实体的CRUD
package com.example.neo4j.neo4jdemo.controller;
import com.example.neo4j.neo4jdemo.entity.Movie;
import com.example.neo4j.neo4jdemo.repository.MovieRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Spring Mvc的根路径、健康检查等。
*/
@RestController
public class MainController {
@Autowired
MovieRepository movieRepository;
@GetMapping("/movie/{movieId}")
public Movie findMovie(@PathVariable("movieId") Long movieId){
return movieRepository.findById(movieId).orElse(null);
}
@GetMapping("/movie/save/{id}")
public Movie findMovie(@PathVariable("id")Long id,@RequestParam("movieId") String movieId,@RequestParam("movieId") String movieTitle){
Movie moviet = movieRepository.saveMovie(id,movieTitle,movieId,movieTitle);
return movieRepository.findById(id).orElse(null);
}
@GetMapping("/movie/author/{name}")
public List<Movie> findMovieByPerson(@PathVariable("name") String name){
return movieRepository.findByPerson(name);
}
@GetMapping("/movie/count/{name}")
public Integer findMovieCountByPerson(@PathVariable("name") String name){
return movieRepository.findCountByPerson(name);
}
}
以上配置完毕,启动时可以看到以下结果
访问http://localhost:8080/movie/39
结果返回

访问 http://localhost:8080/movie/author/%E5%91%A8%E6%98%9F%E9%A9%B0 ,结果返回如下

以上代码库https://gitee.com/seeeyoume/neo4j-demo 需要可以clone看下
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69918097/viewspace-3148352/ ,如需转载,请注明出处,否则将追究法律责任。