ITPub博客

首页 > 数据库 > > spring-boot集成neo4j

spring-boot集成neo4j

作者:兔子爱喝奶茶 时间:2020-05-21 13:25:07 0 删除 编辑

基本环境

此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:7474

实体定义


movie实体的定义如下

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);
}


controller类定义

这里的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);
    }
}

demo效果

以上配置完毕,启动时可以看到以下结果

访问localhost:8080/movie/39

结果返回


访问 localhost:8080/movie/au ,结果返回如下





以上代码库gitee.com/seeeyoume/neo 需要可以clone看下

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69918097/viewspace-3148352/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-26

  • 博文量
    1470
  • 访问量
    11243