본문 바로가기
웹개발지식쌓기

[back] association 과 collection 사용 역할 구분

by developer_j 2023. 6. 1.
728x90
반응형
<resultMap id="memberInfoMap" type="MemberInfoVO">
	<result property="memberSeq"         						column="MBR_SEQ"/>
	<result property="memberId"         						column="MBR_ID"/>
	<result property="memberName"         						column="MBR_NM"/>
	<association property="additionalInfoVO" column="{memberSeq=MBR_SEQ}" javaType="MemberAdditionalInfoVO" select="getMemberAdditionalInfo"/>
	<collection property="likeItemInfoVOList" column="{memberSeq=MBR_SEQ}" javaType="java.util.ArrayList" select="getLikeItemList" />
</resultMap>	

<select id="getMemberDetail" parameterType="MemberVO" resultMap="memberInfoMap">
	... 생략
</select>

<select id="getMemberAdditionalInfo">
	...
</select>

<select id="getLikeItemList" resultMap="mapLikeItemList">
	...
</select>

예시 매퍼파일

 

association 과 collection 사용 역할 구분하기!

매핑결과를 깔끔하게 해주는 association 과 collection 은 결과데이터 간의 n:n 관계에 따라 사용을 달리 해준다.

 

1. 네이버 영어사전.. 으로 이해해보기

association은 제휴, 연계, 유대(combination) collection은 (물건·사람들의) 무리, 더미

제휴는 어쨌든 1:1로 관계를 맺는 거니까, association은 1:1 관계에서 사용한다고 생각하기
무리나 더미는 여러가지를 한꺼번에 모아놓는 거니까, collection은 1:N 관계에서 사용한다고 생각하기! 

결론은 

association은 객체와 객체간의 관계가 1:1 매핑이 될 때 사용한다.
collection은 객체와 객체간의 관계가 1:N 매핑이 될 때 사용한다.

 

2. association, collection의 속성값 설명

예)

<association property="additionalInfoVO" column="{memberSeq=MBR_SEQ}" javaType="MemberAdditionalInfoVO" select="getMemberAdditionalInfo"/>

 

property = 쿼리결과를 세팅할 변수명

- column = (association으로 가져올) 데이터 색인에 사용할 필드, 여러개 사용 가능, 콤마(,)로 구분
                   예)column=”{prop1=col1,prop2=col2}” 

- select = 사용할 select 쿼리 id. 같은 xml 파일 내에 있는 쿼리가 아닐경우, 매퍼의 namespace + 쿼리 id

- resultMap = 결과데이터를 객체에 매핑시키는 것에 대한 정의

- columnPrefix = 지정된 Prefix로 시작하는 컬럼에 대해서만 매핑한다. (예를들어 같은 이름의 컬럼을 가져 올 때)

  예)
, MEMBER_ID
, MEMBER_ID AS ANOTHER_MEMBER_ID
에서 Map 데이터의 속성값에 columnPrefix = "ANOTHER_" 로 지정 시 ANOTHER_ 접두어가 붙은 컬럼을 매핑할 수 있음.

참조 >>>> 중첩 매핑 시 columnPrefix 주의사항 ) https://androphil.tistory.com/733

 

[MyBatis] association columnPrefix 중첩 사용시 주의 사항 :: 소림사의 홍반장!

<!-- <ins class="adsbygoogle" style="display:inline-block;width:320px;height:100px" data-ad-client="ca-pub-6360916919554143" data-ad-slot="4198061716"> (adsbygoogle = window.adsbygoogle || []).push({}); <ins class="adsbygoogle" style="display:inline-block;

androphil.tistory.com

즉, prefix도 상속됨!!!!


javaType = association의으로 가져올 결과를 매핑할 변수의 타입

- ofType = collection 으로 가져올 결과를 매핑할 변수의 타입.. association의 javaType이랑 같은 역할 인 듯!
즉, association 에서는 javaType으로 결과객체의 타입을 명시해주고, collection 에서는 ofType으로 명시해준다.

 

위의 모든 내용은 아래 페이지를 보고 필요한 부분만 정리했다. 이렇게 공식 문서가 깔끔하게 정리되어있으니 편리하다.

https://mybatis.org/mybatis-3/ko/sqlmap-xml.html

 

MyBatis – 마이바티스 3 | 매퍼 XML 파일

Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면

mybatis.org

 


사담

개발하면서 가끔 생각한다

각종 플러그인을 개발하는 사람들은 천재같다.. 개발하기 편리하게 해주신 분들이 존경스럽다 ㅋㅋㅋ

mybatis 는 버전이 업그레이드 되면서 사용하기 점점 편해지고 있다고 한다. 

association 이나, collection 을 접하게 되면서 소스 한번에 여러 쿼리를 작동시킬 수 있다는 점이 편리하고 좋았다. 

728x90
반응형