MyBatis 에서 collection 을 사용하는 방법을 검색하면 대부분 VO 에 list 를 선언해서 사용하는 방법 밖에 나오지 않는다.
근데 현재 내가 해야하는 경우는 vo가 없는 상황에서 쓰는 것이다.
JSON 으로 결과를 이렇게 내려줘야한다.
{
"code": "0000",
"message": "예약내역 조회에 성공했습니다.",
"data": {
"reservationHistory": [
{
"rsSeq": "RS20000007720",
"gdSeq": "GD2000144",
"rsStatus": "A",
"rsStatusNm": "미확인",
"sdSeq": "SDPACK",
"gdName": "패키지상품",
"rsDate": "2020-06-11 13:57:37.0",
"rsSdDate": "20200630",
"rsBuyerName": "홍길동",
"rsBuyerTel": "010-1111-2323",
"rsPerson": 2,
"pmPayMethodNm": "전화예약",
"rsDetails": [
{
"rdSeq": "RD20000012375",
"rdPerson": 1,
"rdPrice": 1800,
"rdAmount": 1800,
"plName": "1회권 패키지",
"inspectInfo": [
"RS20000007737-RD20000012375-1"
]
}
],
"reservationHistoryMemoList": []
}
]
}
}
처음 생각했을 때는 reservationHistory 안에 rsDetails 라는 이름으로 for을 돌리고 그 안에 또 inspectInfo 라는 for 을 돌려야 하지 않을까? 그리고 쿼리는 2~3개를 사용해야하지 않을까? 생각을 했다. 그리고 그렇게 만들고 있었다.
하지만 방법은 의외로 심플했다.
collection 선언한 곳에 보면 JSON 구조에 표시한 이름이 있다.
rsDetails, inspectInfo 가 있다. collection 의 property가 JSON 에서 키 값으로 그대로 노출이 되는 것이다.
여기서 의문점 하나.
과연 collection만 되고 association은 안될까???
collection 을 아래처럼 association 으로 바꿔서 그대로 실행해보았다.
결과는???
맨 위의 JSON 구조와 동일하게 나왔다.
https://mybatis.org/mybatis-3/ko/project-reports.html
솔직히 mybatis 레퍼런스를 봐도 설명을 봐도... 왜 저렇게 되는지는 잘 모르겠다...
이 글을 보시고 아시는 분은 댓글 좀 달아주세여.......개린이는 웁니다....(개발자어린이...)
그리고 궁금증 하나 더!
어째서 JSON 구조에서 rsDetails 가 [] 배열로 나오는건가?
위에 있듯이 javaType이 List로 선언되어 있기때문이다.
JSON 구조를 정확하게 파악하지 못했고 그리고 LIST 와 Object 의 개념을 정확하게 확실히 숙지하지 못해서 생긴 오류들이다... 휴 ... 공부해야지...