//유저 테이블@DatapublicclassMember{privateStringmember_id;//유저 아이디privateStringname;//이름privateStringphone_number;//연락처privateStringhome_address;//주소}//이벤트 참가자 테이블@DatapublicclassEventParticipant{privateintno;//번호privateStringevent_id;//이벤트 고유 IDprivateStringmember_id;//참가한 유저 아이디Membermember;}
SQL
<!-- ★ resultType이 아닌 resultMap을 사용 --><!-- ★ resultMap 속성의 값으로는 작성한 resultMap의 id를 명시 --><selectid="list"parameterType="hashmap"resultMap="eventParticipantMap">
SELECT
E.NO,
E.EVENT_ID,
M.MEMBER_ID,
M.NAME,
M.PHONE_NUMBER,
M.HOME_ADDRESS
FROM
EventParticipant E
INNER JOIN MEMBER M
ON E.MEMBER_ID = M.MEMBER_ID
WHERE
EVENT_ID = #{event_id}
</select>
resultMap
<!-- resultMap 태그 → id 속성 : 사용할 resultMap의 고유 id --><!-- resultMap 태그 → type 속성 : 데이터를 저장할 클래스 --><resultMapid="eventParticipantMap"type="com.my.vo.EventParticipant"><!-- property: 해당 VO에서 사용하는 필드명 --><!-- column : 실제 Database에서 사용중인 칼럼명 --><resultproperty="no"column="NO"/><resultproperty="event_id"column="EVENT_ID"/><resultproperty="member_id"column="MEMBER_ID"/><!-- association 태그 → property 속성 : 참조 객체 변수명 --><!-- 예시 : EventParticipant 클래스에서 MEMBER 클래스를 member라고 명시했으니 해당 속성의 값은 member가 된다. --><!-- association 태그 → javaType 속성 : 해당 참조 객체가 사용하는 클래스 --><!-- ★ association → id 태그 : Primary Key --><associationproperty="member"javaType="com.my.vo.Member"><idproperty="member_id"column="MEMBER_ID"/><resultproperty="name"column="NAME"/><resultproperty="phone_number"column="PHONE_NUMBER"/><resultproperty="home_address"column="HOME_ADDRESS"/></association></resultMap>
1:N 매핑 (collection)
가정
특정 게시글에 대해서 작성되어 있는 댓글 목록을 가져온다.
vo
//게시글 테이블@DatapublicclassBoard{privateintno;//고유 번호privateStringtitle;//제목privateStringcontent;//내용privateStringwriter;//작성자privateDatesign_date;//작성일privateDatamodify_date;//수정일privateList<Comment>comments;//댓글 목록}//댓글 테이블@DatapublicclassComment{privateintno;//고유 번호privateStringcontent;//내용privateStringwriter;//작성자privateDatesign_date;//작성일privateDatamodify_date;//수정일privateintboard_no;//댓글을 작성한 게시글의 고유 번호}
sql
<!-- 게시글 정보 --><selectid="getOneBoard"resultMap="boardInfo">
SELECT
NO,
TITLE,
CONTENT,
WRITER,
SIGN_DATE,
MODIFY_DATE
FROM
Board B
WHERE
NO = #{no}
</select><!-- 댓글용 서브쿼리 --><selectid="getCommentList"resultType="com.my.vo.Comment">
SELECT
NO,
CONTENT,
WRITER,
SIGN_DATE,
MODIFY_DATE,
BOARD_NO
FROM
Comment C
WHERE
BOARD_NO = #{no}
</select>
result
<!-- resultMap 태그 → id 속성 : 사용할 resultMap의 고유 id --><!-- resultMap 태그 → type 속성 : 데이터를 저장할 클래스 --><resultMapid="boardInfo"type="com.my.vo.Board"><resultproperty="no"column="NO"/><resultproperty="title"column="TITLE"/><resultproperty="content"column="CONTENT"/><resultproperty="writer"column="WRITER"/><resultproperty="sign_date"column="SIGN_DATE"/><resultproperty="modify_date"column="MODIFY_DATE"/><!-- collection 태그 → property 속성 : 참조 객체 변수명 --><!-- 예시 : Board 클래스에서 Comment 클래스를 comments라고 명시했으니 해당 속성의 값은 comments가 된다. --><!-- collection 태그 → column 속성 : 서브쿼리에서 참조할 값이 될 메인쿼리의 칼럼 --><!-- 값을 여러개 참조해야 할 때는 column="{prop1=COLUMN1, prop2=COLUMN2}"처럼 쓰면 된다. --><!-- collection 태그 → javaType 속성 : List로 받을 것이기 때문에 java.util.ArrayList가 된다. --><!-- collection 태그 → ofType 속성 : List로 받을 객체 클래스--><!-- collection 태그 → select 속성 : List로 결과 값을 받기 위해 실행할 서브쿼리의 id --><collectionproperty="comments"column="NO"javaType="java.util.ArrayList"ofType="com.my.vo.Comment"select="getCommentList"/></resultMap>