본문 바로가기
Tech/Web

MyBatis Mapper XML파일(ResultMap,Collection)

by 소라소라잉 2019. 11. 18.

* resultMap에 매핑할때 인자로 리스트가 있는 경우 Collection이용! *

 

 

<회원 정보 : MemberVO> 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package org.zerock.domain;
 
import java.util.Date;
import java.util.List;
 
import lombok.Data;
 
@Data
public class MemberVO {
    private String userid;
    private String userpw;
    private String username;
    private boolean enabled;
 
    private Date regDate;
    private Date updateDate;
    private List<AuthVO> authList; // 회원 하나가 여러개의 권한을 가질 수 있기 때문 
}
 
cs

 

 

<회원 권한 : AuthVO>

1
2
3
4
5
6
7
8
9
10
11
package org.zerock.domain;
 
import lombok.Data;
 
@Data
public class AuthVO {
 
    private String userid;
    private String auth;
}
 
cs

한 회원이 여러개의 권한을 가질 수 있으니 AuthVO List를 인스턴스 변수로 가짐. 

 

<Mapper.xml> 

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
32
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="org.zerock.mapper.MemberMapper">
 
    <!-- 한방에 1:N의 관계를 해결해 줄 수 있다. -->
    <resultMap type="org.zerock.domain.MemberVO" id="memberMap">
        <id property="userid" column="userid" />
        <result property="userid" column="userid" />
        <result property="userpw" column="userpw" />
        <result property="username" column="username" />
        <result property="regDate" column="regdate" />
        <result property="updateDate" column="updatedate" />
        <collection property="authList" resultMap="authMap">
        </collection>
    </resultMap>
 
    <resultMap type="org.zerock.domain.AuthVO" id="authMap">
        <result property="userid" column="userid" />
        <result property="auth" column="auth" />
    </resultMap>
 
    <select id="getMember" resultMap="memberMap">
        SELECT MEM.USERID, USERPW,USERNAME, ENABLED,REGDATE,UPDATEDATE, AUTH
        FROM TBL_MEMBER MEM LEFT OUTER JOIN TBL_AUTH AUTH
        ON MEM.USERID = AUTH.USERID
        WHERE MEM.USERID=#{userid}
    </select>
</mapper>
 
cs

userid를 이용하여 select문으로 member정보를 가져올 때 result를 memberMap으로 설정.

memberMap은 Type이 MemberVO로 되어있고 그 안에 List<AuthVO>는 Collection(property, resultMap)으로 지정해줌. 그리고 AuthVO resultMap을 또 만들어 줌. 

 

여기서 memberMap의 <id property>는 그냥 '얘가 pk에요'라고 알려주는 용도.

컬럼이 두개 나오는 건 아님! 

 

 

'Tech > Web' 카테고리의 다른 글

ORM과 JPA  (0) 2019.11.25
[Spring] UriComponentsBuilder의 사용  (0) 2019.11.22
Spring-Web-Security  (0) 2019.11.15
[Spring] Spring 기본세팅 & Setting Test  (1) 2019.11.07
[Spring] Spring 구성요소와 동작원리  (0) 2019.11.07

댓글