jpa를 사용하는 환경이면 @OneToMany를 사용해서 Dto안의 List<Dto>를 반환하는 것을 쉽게 구현할 수 있다. 하지만, mybatis에서는 resultMap을 이용해서 서브정보를 쿼리로 반환해야 한다. (xml에 resultMap을 사용하는 예시를 바로 보려면 2-2. 쿼리작성 부터 보시면 됩니다.)
1. 요구사항
프론트에서 아래와 같은 json 포맷으로 요구했다. 메인 정보 안에 서브정보를 리스트로 반환해야 한다.
요구사항 JSON
[
{
"id": "an001",
"title": "데브옵스개발팀에 초대합니다.",
"content": "오세요",
"skills": [
{
"skillId": "sk001",
"skNm": "java"
},
{
"skillId": "sk002",
"skNm": "python"
},
{
"skillId": "sk003",
"skNm": "react"
}
]
},
{
"id": "an002",
"title": "춘개발자를 모집합니다.",
"content": "오십쇼",
"skills": [
{
"skillId": "sk002",
"skNm": "python"
},
{
"skillId": "sk004",
"skNm": "mySql"
}
]
}
]
위처럼 반환하기 위해서는 여러 가지 방법이 있겠지만, resultMap을 사용해서 한 번에 반환해 보자.
2. 해결방법
2-1. dto를 2개 만든다.
위에 json 내용을 보면 공고에 대한 정보(=dto) 하나 안에, 스킬에 관한 서브정보(=dto)로 2개의 dto가 필요할 것을 예상할 수 있다.
2-1-1. 공고 dto
AnnouncementDto
2-1-2. 스킬 dto
SkillDto
2-2. 쿼리 작성
xml에 쿼리를 작성할 때, resultMap을 사용하면 된다.
쿼리
위처럼, resultMap을 사용해서 메인 dto, 서브 dto 관계를 정의를 해서 쿼리문에서 사용하면 된다.
3. 결과 확인
vscode에서는 Thunder Client로 api를 테스트할 수 있다. 아래 캡처 화면을 보면 정상적으로 반환되는 것을 확인할 수 있다.
'Back-end > Spring' 카테고리의 다른 글
[Spring] 멀티 MQ 리스너 개발 내용 (0) | 2023.12.20 |
---|---|
[Spring] 페이지 처리 Request, Response Dto 변수 항목 (0) | 2023.07.16 |
[Spring] 컨트롤러 Request, Response 간단한 예시 (0) | 2023.05.16 |
[Spring] @ResponseBody에서 객체를 JSON 반환(HttpMessageConverter) (0) | 2023.03.30 |
[Spring] 빈(Bean) 주입 받는 방법 가장 쉬운 예시 (0) | 2023.03.15 |