Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 사용법
- Rocky Linux 9
- poll scm
- 백준 JAVA
- jenkins
- tomcat-users.xml
- DBeaver
- PostgreSQL
- SVN
- jaekjoon java
- 서버 접근
- 메뉴얼
- 제수가 0입니다
- 환경번수
- subversion
- ora-01476
- linux
- bekjoon
- 백준
- jsonb select
- available plugins
- rocky linux
- 1773번
- putty
- baekjoon
- boj
- javascript
- 자바
- java
- 백준 java jaekjoon JAVA
Archives
기록하는 개발자
MyBatis resultMap collection 사용법 [1:N select] 본문
예제
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