-
SpringBoot+Neo4j [CRUD 기능 구현]NOSQL/Neo4j 2021. 11. 9. 14:38
Spring을 이용한 Neo4j의 CRUD Method들을 살펴보겠다.
아래 코드를 꼭 참고하며 보는 것을 추천한다.
https://github.com/alska95/Spring_Neo4j_Project
앞서 언급한 것처럼 SpringDataNeo4j가 제공하는 3가지 방법을 통해 다뤄보겠다.
1.Neo4jRepository 를 이용하는 방법
2.Neo4jClient를 이용하는 방법
3.Driver을 이용하는 방법
a. Create
- neo4jRepository 이용
아래와 같이 neo4jRepository의 save를 이용하는 방법이 있다.
save 구현 메소드는 Neo4jTemplate클래스의 saveImpl을 참고하면 되는데 복잡하다.
본 프로젝트같이 단순한 프로젝트에서는 pk가 중복되면 업데이트를 하고
pk가 존재하지 않는 값이라면 create를 해준다 정도만 이해하면 되겠지만, 자세한 구현 방법을 찾아보는 것을 추천한다.
다른 방법으로는 위에서 살펴봤던 Driver을 이용해서 직접 쿼리를 날리는 방법, 혹은 neo4jClient를 이용하는 방법이 있겠다.
- Neo4jClient이용
1.neo4jClient에 실행하고자 하는 cyperQuery를 .query안에 적어준다.
이때 parameter로 받고 싶은 값은 앞에 $로 표시한다.
2. 이전에 정의했던 databaseSelectionProvider이 고른 db의 value를 가져와서 in안에 적어준다.
3. parameter 값들에 bindAll(Map.of(“param” , value) 형식으로 값을 매핑해준다.
4. fetch로 값을 가져온다.
그냥 Fetch로 가져올 경우, RecordFetchSpec형식으로 return한다.
fetchAs를 사용해서 return받고 싶은 타입을 정의할 수 있다.
아래는 fetchAs(MovieDto.class)를 사용하여 projection해서 결과값을 가져온 코드이다.
projection에 대해서는 다음 게시물(프로젝트 2번)에서 더 자세하게 다루도록 하겠다.
- Driver 이용
b. Read
- neo4jRepository 이용
searchMoviesByTitle과 serachMoviesByTitle2는 동일하게 동작함을 확인할 수 있다.
동작 쿼리는 위에서 다뤘던 Repository를 살펴보자.
조회는 필요한 조건에 따라 수행할 수 있는 방법이 무궁무진 하다.
다양한 조회 쿼리의 사용 방법에 대해서는 아래 링크의
5. 다양한 조회 쿼리 생성 (+projection)
항목을 참고하자.
SpringBoot+Neo4j [2. 두 개의 노드 엔티티와 두 개의 관계를 가지는 GraphDB프로젝트]
SpringBoot+Neo4j [2. 두 개의 노드 엔티티와 두 개의 관계를 가지는 GraphDB프로젝트]
목차 SpringBoot+Neo4j A-Z [1. 하나의 노드 엔티티만을 가지는 GraphDB프로젝트]를 따라 하는 대에 무리가 없었다면, RelationShip을 가지는 엔티티의 구현 또한 식은 죽 먹기다. 본 프로젝트에서는 공식 예
rhsalska55.tistory.com
c. Update
- neo4jRepository 이용
위에 Save 할 때와 같은 방식으로 neo4jRepository를 이용하여
pk에 수정을 원하는 값을 집어넣고 필드를 수정한 후에 save 하는 방식으로 update가 가능하다.
- neo4jClient 이용
vote값을 찾아와서 1을 더해준다.
주석을 참고하자.
d. Delete
- neo4jRepository 이용
pk값(title)만 넘겨줘도 무방하다.
- driver이용
Match (n) detach Delete n을 사용하면 대상 전체를 선택하여 제거하게 된다.
Detach는 관계를 모두 끊어준다는 의미인데, 이 역시 다음 게시물(프로젝트2번)에서 상세하게 다루도록 하겠다.
이로서 기본적인 CRUD까지 살펴봤다.
본 프로젝트는 대부분 Neo4jRepository를 이용하여 개발할 예정이다.
Neo4jClient와 Driver을 직접 사용하는 부분이 이해가 안되더라도, Neo4jRepository의 기능에 대해 이해했다면 프로젝트를 진행하는대에 당장은 큰 무리가 없을 것이다. 여기서 감을 잡지 못했다면 프로젝트 2번에서 훨씬 더 자세하게 CRUD에 대해서 다루니 이를 참고 하자.
'NOSQL > Neo4j' 카테고리의 다른 글
SpringBoot+Neo4j [2. 두 개의 노드 엔티티와 두 개의 관계를 가지는 GraphDB프로젝트] (0) 2021.11.12 SpringBoot+Neo4j [API 구현] (0) 2021.11.12 SpringBoot+Neo4j [1. 하나의 노드 엔티티만을 가지는 GraphDB프로젝트] (1) 2021.11.09 SpringBoot+Neo4j [Neo4jRepository에 관하여] (0) 2021.11.09