728x90
반응형
Neo4j
노드간의 연관관계를 영속화 하는데 유리한 그래프 데이터베이스
특징
- 노드들과 연관관계를 표현하는데 있어 풍부한 기능을 제공
릴레이셔널 DB
보다 좀 더 빠르다는 장점을 가진그래프 DB
- 버전마다 하위호환성이 좋지 않다.
- 하위호환성이 없어 최신버전에서는
Neo4jTemplate
,Neo4jOperation
이 Bean으로 등록되지 않는다. - Neo4j 자체로도 하위호환성이 좋지 않아 최신버전에서는 포트 매핑 2개 해야함 앞
Http
용, 뒤Bolt
라는Protocol
용 - UI가 예쁜
Client Browser
제공http://localhost:7474/
예제
SessionFactory 이용
1. 의존성 추가
// pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
// spring-boot-starter-parent 버전 관련
// 2.0.3.RELEASE -> 2.3.3.RELEASE 로 변경해야 Neo4j 정상 사용가능(2020.08.31)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
2. Docker 이용 Neo4j 저장소 생성
// Terminal
// 저장소 생성
// 앞 포트는 Http용
// 뒤 포트는 Bolt Protocol용
docker run -p 7474:7474 -p 7687:7687 --name neo4j_boot -d neo4j
3. Neo4j 접속 확인
(1) http://localhost:7474
접속
(2) 최초 로그인 시 비밀번호 변경 필요
(3) application.properties
에 username
및 변경한 password
설정
// application.properties
spring.data.neo4j.password=1111
spring.data.neo4j.username=neo4j
(4) 접속 확인
5. Account 객체 및 Neo4jRunner 생성
// Account.java
@NodeEntity
public class Account {
@Id @GeneratedValue
private Long id;
private String username;
private String email;
getter/setter
}
// Neo4jRunner.java
@Component
public class Neo4jRunner implements ApplicationRunner {
@Autowired
SessionFactory sessionFactory;
@Override
public void run(ApplicationArguments args) throws Exception {
Account account = new Account();
account.setEmail("sun7190@naver.com");
account.setUsername("Jinseo");
Session session = sessionFactory.openSession();
session.save(account);
sessionFactory.close();
System.out.println("finished");
}
}
결과 확인
관계 추가
1. Role 클래스 생성
// Role.java
@NodeEntity
public class Role {
@Id @GeneratedValue
private Long id;
private String name;
getter/setter
}
2. Account 객체에 Role 관계 추가
// Account.java
@NodeEntity
public class Account {
...
@Relationship(type = "has")
private Set<Role> role = new HashSet<>();
getter/setter
}
3. Neo4jRunner 에 Role 정보 설정 및 Account 객체에 추가
// Neo4jRunner.java
@Component
public class Neo4jRunner implements ApplicationRunner {
@Autowired
SessionFactory sessionFactory;
@Override
public void run(ApplicationArguments args) throws Exception {
Account account = new Account();
account.setEmail("sun7190@naver.com");
account.setUsername("Jinseo");
Role role = new Role();
role.setName("admin");
account.getRole().add(role);
Session session = sessionFactory.openSession();
session.save(account);
sessionFactory.close();
System.out.println("finished");
}
}
결과 확인
Repository 이용
1. AccountRepository 생성
// AccountRepository.java
public interface AccountRepository extends Neo4jRepository<Account, Long> {}
2. Neo4jRunner 에서 SessionFactory
대신 AccountRepository 사용
// Neo4jRunner.java
@Component
public class Neo4jRunner implements ApplicationRunner {
@Autowired
AccountRepository accountRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
Account account = new Account();
account.setEmail("sun7190@naver.com");
account.setUsername("Jinseo");
Role role = new Role();
role.setName("admin");
account.getRole().add(role);
accountRepository.save(account);
System.out.println("finished");
}
}
결과 확인
728x90
반응형
'Dev > Spring Boot' 카테고리의 다른 글
[스프링 부트 개념과 활용] 스프링 시큐리티 1부 (0) | 2020.08.31 |
---|---|
[스프링 부트 개념과 활용] 스프링 데이터 12부 (0) | 2020.08.31 |
[스프링 부트 개념과 활용] 스프링 데이터 10부 (0) | 2020.08.28 |
[스프링 부트 개념과 활용] 스프링 데이터 9부 (0) | 2020.08.28 |
[스프링 부트 개념과 활용] 스프링 데이터 8부 (0) | 2020.08.27 |
댓글