WORK/JAVA

MyBatis XML resultMap의 list 에 list 조회하기

im 수캥이 2023. 11. 7. 13:52
SELECT
   USER_ID
, DEPT_ID 
, USER_NM
FROM USER_INFO
cs

사용자 테이블 조회시 결과값이 아래와 같이 조회되는경우

USER_ID DEPT_ID  USER_NM
U23001 D001 홍길동
U23002 D002 이순신
U23003 D003 장영실

그리고 부서 테이블 조회 시 결과값이 아래와 같이 조회되는 경우

SELECT
   COMPANY_CODE
, COMPANY_NAME
, DEPT_ID
FROM DEPT_INFO
WHERE 1 = 1
AND DEPT_ID = 'D001'
cs
COMPANY_CODE COMPANY_NAME DEPT_ID 
C001 티스토리 그룹 D001
C002 티스토리 건설 D001
C003 티스토리 패션 D001

 

xml에서의 쿼리 작성은 두개로 해야 하지만, 호출 하나로 두개의 LIST를 모두 가져와 jsp 에서 파싱이 가능하다.

/* controller 에서 호출하는 mapper ID : getUser_List */
<select id="getUser_List" resultMap="deptListMap" >
    SELECT
          USER_ID
         , DEPT_ID 
         , USER_NM
    FROM USER_INFO
</select>
 
/* getUser_List 에서 호출하는 mapper ID : getUser_List */
<resultMap id="deptListMap" type="java.util.HashMap"> /* type은 리턴 될 타입 */
    <result property="DEPT_ID " column="DEPT_ID "/>
    <result property="추가 컬럼있을경우" column="추가 컬럼있을경우"/>
    <collection property="DEPT_LIST" column="DEPT_ID = DEPT_ID , 추가 컬럼있을경우 = 추가 컬럼있을경우" javaType="java.util.HashMap" ofType="java.util.HashMap" select="getDeptDataList"/>
</resultMap>
 
/* controller 에서 호출하는 mapper ID : getUser_List */
<select id="getDeptDataList" parameterType="java.util.HashMap" resultType="java.util.HashMap" >
    SELECT   
        COMPANY_CODE
       , COMPANY_NAME 
       , DEPT_ID
    FROM DEPT_INFO
    WHERE 1 = 1
    AND DEPT_ID = #{DEPT_ID} // deptListMap 의 result property 
</select>
cs

 

java 파일

// DAO 또는 서비스 (xml호출 부분) 샘플 
// 상단 xml mapper id 중 getUser_List 하나만 호출 한다.
// 각자 맞는 형식에 따라 수정해야 합니다.
sqlSession.selectList("[MapperNamespace].getUser_List");
 
// controller 샘플
// 각자 맞는 형식에 따라 수정해야 합니다.
List resultList = 서비스명.getUser_List();
HashMap rtn = rtn.put("resultList", resultList);
 
return rtn ;
cs

 

jsp에서 파싱 예제

<c:forEach items="${resultList}" var="item" varStatus="status">
    ${item.USER_NM}
    <c:forEach items="${item.DEPT_LIST}" var="deptList" varStatus="DeptSatus">    // items는 xml에서 collection property 값
        ${deptList.COMPANY_NAME}
    </c:forEach>
</c:forEach>
cs

contoroller에서 map에 담아 리턴한  resultList 로 for문 돌리면서 해당 값에 속하는 부서정보 LIST를 파싱하면 된다.

 

핵심은 xml 작성 예시와 jsp 파싱 예제만 보면 된다.

controller는 이해를 돕기위해 샘플로 작성한 파일이라 각자 맞는 프레임워크에 맞춰 수정하며 된다.

 

'WORK > JAVA' 카테고리의 다른 글

Eclipse 에서 Maven Project War Export  (0) 2023.12.19
jsp 엑셀다운로드 받기  (2) 2023.11.29
spring boot 에러페이지 만들기  (1) 2022.11.01
이클립스 git 접속정보 저장  (1) 2022.09.29
curl REST API 호출 및 값 파싱 예제  (0) 2022.09.19