지역(zone)도 역시 밸류가 아닌 엔티티!
Zone
- City (영문 도시 이름)
- LocalNameOfCity (한국어 도시 이름)
- Province (주 이름, nullable)
Account와 Zone의 객체 지향적인 관계
Account와 Zone의 관계형 관계
지역 데이터 초기화
- 위키 피디아 데이터 참조
- https://en.wikipedia.org/wiki/List_of_cities_in_South_Korea
- 데이터를 CVS로 옮기고 초기화 하기
Zone 엔티티 생성
package me.weekbelt.studyolle.domain;
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @Setter @EqualsAndHashCode(of = "id")
@Entity
public class Zone {
@Id @GeneratedValue
private Long id;
@Column(nullable = false)
private String city;
@Column(nullable = false)
private String localNameOfCity;
@Column(nullable = true)
private String province;
}
zone데이타를 위키피디아에서 복사해서 google 스프레드시트로 복사후 csv파일로 저장
저장한 zones_kr.csv를 resoucres폴더 아래에 둔다.
ZoneRepository생성
package me.weekbelt.studyolle.zone;
public interface ZoneRepository extends JpaRepository<Zone, Long> {
}
도시정보 데이터를 서비스계층에서 저장하기위해 ZoneService생성
package me.weekbelt.studyolle.zone;
@RequiredArgsConstructor
@Transactional
@Service
public class ZoneService {
private final ZoneRepository zoneRepository;
@PostConstruct // ZoneService 빈이 만들어진 이후에 실행되는 지점
public void initZoneData() throws IOException {
if (zoneRepository.count() == 0) {
Resource resource = new ClassPathResource("zones_kr.csv");
List<Zone> zoneList = Files.readAllLines(resource.getFile().toPath(), StandardCharsets.UTF_8)
.stream().map(line -> {
String[] split = line.split(",");
return Zone.builder()
.city(split[0])
.localNameOfCity(split[1])
.province(split[2])
.build();
}).collect(Collectors.toList());
zoneRepository.saveAll(zoneList);
}
}
}
참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1#
'스프링과 JPA 기반 웹 어플리케이션 개발 > 2부(관심 주제와 지역 정보)' 카테고리의 다른 글
41. 지역 정보 테스트 코드 (0) | 2020.04.23 |
---|---|
40. 지역 정보 추가 삭제 (0) | 2020.04.23 |
38. 관심 주제 테스트 (0) | 2020.04.23 |
37. 관심 주제 자동완성 (0) | 2020.04.22 |
36. 관심 주제 삭제 (0) | 2020.04.22 |