[TIL] Map 객체를 list계층 구조로 이루어진 DTO에 넣기

✅ Today I Learned

Map에서 꺼낸 정보를 DTO(안에 innerClass로 DTO들이 리스트로 있는..)에 매핑하기

어제 했던 고민을 드디어 오늘 해결했다. 내 머리로는 해결못해서 부장님께 물어보고 힌트를 얻었다..후후.. 여기 나오는 예시는 구조만 비슷하게 가져오고

내 고민은 다음과 같았다.

{"A":"한국", "B":"서울", "C":"성동구", "D":"XX로"}
{"A":"한국", "B":"서울", "C":"성동구", "D":"OO로"}
{"A":"한국", "B":"경기도", "C":"과천시", "D":"YY로"}
{"A":"미국", "B":"뉴욕", "C":"맨해튼", "D":"street1"}
{"A":"미국", "B":"캘리", "C":"LA", "D":"street2"}
...

이렇게 같이 생긴 List<Map> 객체를 받아서 다음과 같이 생긴 DTO에 넣는 것이다. 보다시피 innerClass로 되어있는 DTO들이 있고, DTO안에 List 들이 있어서 어떻게 변환해야할지 참 난감했다.

@Data
public class CountryDTO {
    private String a;
    public List<CityDto> CityDtoList = new ArrayList<>();

    @Data
    public class CityDto {
        private String b;
        public List<DistrictDto> DistrictDtoList = new ArrayList<>();
    }

    @Data
    public class DistrictDto {
    	private String c;
        public List<StreetDto> StreetDtoList = new ArrayList<>();
    }

    @Data
    public class StreetDto {
        private String d;
    }

}
  1. CounrtryDto countryDto = new CountryDto(); 로 담을 그릇이 되는 DTO를 생성한다. DTO클래스에서 list들을 new ArrayList 로 초기화 해준 이유도 list가 null이 되지 않고, list에 값이 없더라도 size() 를 사용하기 위해서이다.
  2. For문을 돌면서 Map 객체를 하나씩 꺼낸다.
  3. 총 4개의 insert 메소드가 위계에 따라서 진행된다. 이미 기존의 리스트에서 같은 값을 가진 Dto가 있는지를 검증해보고, 있으면 기존 Dto에, 없으면 새로운 Dto에 값을 insert한다.

오늘은 설명만 하다가 끝났는데, 다음에 포스팅으로 자세히 다룰 예정이다.👋

MySql 날짜 관련 함수 - 일부만 추출하기

MySql이 되게 간결한 것 같다. 날짜 형식이 2021-07-29 18:07:26 이런식으로 적혀 있을 때 종종 년도나 시간같은 일부값만 필요할 때가 있다. 그럴 때 지원하는 함수들이다. 참고는 아래블로그.

YEAR(기준날짜)
MONTH(기준날짜)
DAY(기준날짜)
HOUR(기준날짜)
MINUTE(기준날짜)
SECOND(기준날짜)

-- 이건 다른 블로그에 안써있지만 연월시를 제외한 시간(시/분/초)만 추출하고 싶을 때 TIME을 사용
TIME(기준날짜)


❣️ Today I Feel

  • 머리가 조금 지끈지끈하긴 해도 문제를 해결하는게 제일 재밌다. 문제는 데이터가 너무 많을 경우에 문자가 생길 것 같은데 조금 고민할 필요가 있을 것 같다.


🔜 앞으로의 공부 방향

  • JPA 인강 진도표 만들어서 공부하기
  • 건축기사…는 언제 공부하지?
  • 블로그 꾸미기..

댓글남기기