Egovmap 반환에 대한 문의사항
- 작성자 :
- 김*현
- 작성일 :
- 2023-07-06 10:52:05
- 조회수 :
- 729
- 구분 :
- 개발환경 / 3.8
- 진행상태 :
- 완료
Q
안녕하세요 Egovmap 반환형식에 대해 문의사항이 있어 글을 남깁니다.
첨부파일과 같이 DAO에서 sm20.xml의 selectBatchLog를 egovMap 형식으로 받아옵니다.
DAO의 retern 형식이 List<Sm20VO> 이기에 selectList("sm20.selectBatchLog",map)을 통해
받아오는 데이터 또한 List<Sm20VO>로 일치해야 된다고 알고 있습니다.
그런데 selectList("sm20.selectBatchLog",map)이 return 하는 것을 보면 VO와 맵핑되는 변수가 없음에도 불구하고,
xml에서 select하는 모든 데이터를 끌어와서 return 해주고 있습니다.
(VO 변수 3개, xml에서 select하는 변수 15개)
MyBatis에서 resultType의 맵이면 내부적으로 리플렉션 사용하는데 resultType의 타입으로 캐스팅하면서 작동하여
자바에서 반환형으로 VO를 걸어놨지만 제네릭으로 캐스팅되어 실제로 컴파일 된 바이트 코드 내에서는 VO가 맵으로 잡혀서 작동했을 것으로 추측하고있습니다.
어떤 과정으로 해당 로직이 돌아가는지 정확히 확인해주시면 감사하겠습니다.
첨부파일과 같이 DAO에서 sm20.xml의 selectBatchLog를 egovMap 형식으로 받아옵니다.
DAO의 retern 형식이 List<Sm20VO> 이기에 selectList("sm20.selectBatchLog",map)을 통해
받아오는 데이터 또한 List<Sm20VO>로 일치해야 된다고 알고 있습니다.
그런데 selectList("sm20.selectBatchLog",map)이 return 하는 것을 보면 VO와 맵핑되는 변수가 없음에도 불구하고,
xml에서 select하는 모든 데이터를 끌어와서 return 해주고 있습니다.
(VO 변수 3개, xml에서 select하는 변수 15개)
MyBatis에서 resultType의 맵이면 내부적으로 리플렉션 사용하는데 resultType의 타입으로 캐스팅하면서 작동하여
자바에서 반환형으로 VO를 걸어놨지만 제네릭으로 캐스팅되어 실제로 컴파일 된 바이트 코드 내에서는 VO가 맵으로 잡혀서 작동했을 것으로 추측하고있습니다.
어떤 과정으로 해당 로직이 돌아가는지 정확히 확인해주시면 감사하겠습니다.
환경정보
-
- OS 정보 : windows
- 표준프레임워크 버전 : 3.8
- JDK(JRE) 정보 : jdk1.8.0_211
- WAS 정보 : tomcat 9
- DB 정보 : oracel 11C
- 기타 환경 정보 : 포털용
A
안녕하세요. 표준프레임워크 센터입니다.
EgovAbstractMapper 클래스의 selectList()를 확인하시면
결과값에 대한 정의가 다음과 같은 것을 확인하실 수 있습니다.
'@return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List'
또한 resultType에 선언된 EgovMap은 Map형태의 클래스로 iBatis(myBatis) parameterClass 또는 resultClass에서
사용할 수 있도록 제공되는 클래스입니다.
여기에 추가적으로 ListOrderedMap을 상속받는 클래스를 생성하고 PUT함수를 가로채
새로운 Map객체를 만들어서 Key에 해당되는 부분을 CamelCase 방식으로 치환하여
적용하는 기능이 있습니다.
기타 자세한 사항은 다음 위키가이드 항목을 살펴보시면 참고 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:data_access&s[]=dataaccess
감사합니다.
EgovAbstractMapper 클래스의 selectList()를 확인하시면
결과값에 대한 정의가 다음과 같은 것을 확인하실 수 있습니다.
'@return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List'
또한 resultType에 선언된 EgovMap은 Map형태의 클래스로 iBatis(myBatis) parameterClass 또는 resultClass에서
사용할 수 있도록 제공되는 클래스입니다.
여기에 추가적으로 ListOrderedMap을 상속받는 클래스를 생성하고 PUT함수를 가로채
새로운 Map객체를 만들어서 Key에 해당되는 부분을 CamelCase 방식으로 치환하여
적용하는 기능이 있습니다.
기타 자세한 사항은 다음 위키가이드 항목을 살펴보시면 참고 가능합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:data_access&s[]=dataaccess
감사합니다.