본문 바로가기
스프링과 JPA 기반 웹 어플리케이션 개발/2부(관심 주제와 지역 정보)

39. 지역 도메인

by Backchus 2020. 4. 23.

지역(zone)도 역시 밸류가 아닌 엔티티!

Zone

  • City (영문 도시 이름)
  • LocalNameOfCity (한국어 도시 이름)
  • Province (주 이름, nullable)

 

Account와 Zone의 객체 지향적인 관계

다대다(@ManyToMany) 단방향 관계

Account와 Zone의 관계형 관계

조인 테이블을 사용한 두개의 1대다 관계

지역 데이터 초기화

 

List of cities in South Korea - Wikipedia

This article is about cities in the country generally. For places that are administratively designated specifically as "city", see List of cities of South Korea. Wikimedia list article   Special city   Metropolitan autonomous city   Metropolitan cities   S

en.wikipedia.org

 

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

저장한 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 기반 웹 애플리케이션 개발 - 인프런

이 강좌에서 여러분은 실제로 운영 중인 서비스를 스프링, JPA 그리고 타임리프를 비롯한 여러 자바 기반의 여러 오픈 소스 기술을 사용하여 웹 애플리케이션을 개발하는 과정을 학습할 수 있습니다. 이 강좌를 충분히 학습한다면 여러분 만의 웹 서비스를 만들거나 취직에 도움이 될만한 포트폴리오를 만들 수 있을 겁니다. 활용 웹 개발 프레임워크 및 라이브러리 Java Spring Spring Boot Spring Data JPA Thymeleaf 온라인 강의 스

www.inflearn.com