기록하는 개발자

MyBatis resultMap collection 사용법 [1:N select] 본문

Open Source

MyBatis resultMap collection 사용법 [1:N select]

gitseok 2022. 7. 29. 14:18
 

예제

 A. 사용자 테이블(tb_user)

USER_ID USER_EMAIL OCCU_CD
사용자 ID 사용자 이메일 직종코드

 B. 고용 소식(tb_news) - 기타정보생략

NEWS_ID OCCU_CD OCCU_NM COMPANY_CD REGIST_DTTM
소식 아이디 직종 코드 소식 명 회사 코드 등록일

 C. 회사 정보(tb_company)

COMPANY_CD COMPANY_NM
회사 코드 회사 명

D. 조회 결과(기타정보생략)

직종 회사 명(+ 정보) 발송 대상 회원
웹개발 회사1
회사입니다
회사2
user1
user2
user3
user4
user5
user100
퍼블리셔 회사3
회사4
user200
user300
user400

한 행에 여러개의 정보(list)가 필요할때(=1:N) 사용하는것이 mybatis resultMap collection 입니다.


코드

 1. VO

   - occuVO

	private String occuCd; 			//직종 코드
	private String occuNm;			//직종 명
	private List<jobInfoVO> jobList;	//고용 소식 목록
	private List<userInfoVO> userList;	//유저 목록

  - jobInfoVO

	private String newsId;		//소식ID
	private String title;		//제목
	private String contents;	//내용
	private String companyCd;	//회사 코드
	private String companyNm;	//회사 명

  - userInfoVO

	private String userId;		//사용자 ID
	private String userEmail	//사용자 이메일

 2. XML 

<resultMap  id="infoList" type="..occuVO">
	<result property="occuCd" column="occu_cd"/>
	<result property="occuNm" column="occu_nm"/>
	<collection column="occuCd = occu_cd" property="jobList" javaType="List" 
    				ofType="..jobInfoVO" select="selectjobInfoList"/>
	<collection column="occuCd = occu_cd" property="userList" javaType="List" 
    				ofType="..userInfoVO" select="selectUserInfoList"/>
</resultMap>
	
    <!-- 기간 내 등록된 직종 조회 -->
	<select id="selectTestDataList" parameterType="" resultMap="infoList">
		select distinct
			occu_cd,
			occu_nm
		from tb_news
		where regist_dttm between now() - INTERVAL '1 weeks' AND now()
	</select>	

	<!--  해당 직종의 기간 내 등록 소식  -->
	<select id="selectjobInfoList" parameterType="..occuVO" resultType="..jobInfoVO">
		select 
			news_id,
			title,
			content,
			company_cd,
			company_nm
		from tb_news N
		left join tb_company C ON N.company_cd = C.company_cd
		where 1=1
		and regist_dttm between now() - INTERVAL '1 weeks' AND now()
		and B.occu_cd = #{occuCd}

	</select>
    
	<!-- 해당 직종 소식을 받는 사용자 정보 -->
	<select id="selectUserInfoList" parameterType="..occuVO" resultType="..userInfoVO">
		select
			user_id,
			user_email
		from tb_user U
		where 1=1
		and U.occu_cd = #{occuCd}
	</select>

설명

resultMap = 메인 select문의 resultType과 연동
<result> 메인 select 문의 컬럼들
<collection>
  - column : 서브 select문의 where 조건에 들어감
  - property : 메인 VO에 서브VO를 받아오는 List
  - javaType : 파라미터 객체의 타입
  - ofType : 서브VO 연결
  - select : 서브select문의 ID

 

 

개인적으로 정리한 내용을 간단하게 풀어 작성했습니다.
이해가 안가는 부분은 댓글 남겨주시면 설명해드리겠습니다.

 

'Open Source' 카테고리의 다른 글

amCharts 5 계층형 Treemap 메뉴얼  (0) 2022.11.23
summernote 메뉴얼  (0) 2021.12.05
CKEditor5 메뉴얼  (0) 2021.12.05
Docker 설정 메뉴얼  (0) 2021.12.05
Comments