MyBatis

resultMap.

Jungsoomin :) 2020. 9. 8. 10:08

일단 PartyVO는 N이라고 가정한다.

 <collection> 태그 안의 내용은 M , 즉 N :M의 관계에서 M을 나타낸다.

 <discriminator> 태그 안의 내용은 분기점을 나타나는데 즉 해당 컬럼이 하나의 상수라고 생각함이 편하다.

  해당 컬럼의 값여부를 판단하여 <case>태그에 따라 <resultMap>을 분기한다.

    <discriminator> 태그 속성의 extends 속성에 따라 상속관계가 정의되어 있어 해당 resultMap을 상속받아 맵핑한다.

      

<resultMap type="www.study.com.orm.party.model.PartyVO" id="partyVo">
		<result column="id" property="id" javaType="java.lang.Integer"/>
		<result column="name" property="name" javaType="java.lang.String"/>
		<result column="birth_date" property="birthDate" javaType="java.util.Date"/>
		<collection property="listContactPoint" ofType="www.study.com.orm.party.model.ContactPointVO">
		    <id property="typeName" column="type_name"/>
		    <result property="contactPoint" column="t_contact_point"/>
	    </collection>
	    <collection property="listHashTag" resultMap="hashTagVo" columnPrefix="ht_">
	    </collection>
		 <discriminator javaType="java.lang.String" column="party_type">
		    <case value="PERSON" resultMap="personResult"/>
		    <case value="ORGANIZATION" resultMap="organizationResult"/>
		  </discriminator>
	</resultMap>
	
	<resultMap type="www.study.com.orm.party.model.PersonVO" id="personResult" extends="partyVo">
		<result column="gender" property="gender"/>
	</resultMap>
	
	<resultMap type="www.study.com.orm.party.model.OrganizationVO" id="organizationResult" extends="partyVo">
		<result column="salesTot" property="salesTot"/>
	</resultMap>
	
	<resultMap type="www.study.com.orm.party.model.HashTagVO" id="hashTagVo">
		<result column="id" property="id" javaType="java.lang.Integer"/>
		<result column="name" property="name" javaType="java.lang.String"/>
	</resultMap>
	
	<resultMap type="www.study.com.orm.party.model.ContactPointVO" id="contactPointVo">
		<result column="id" property="id" javaType="java.lang.Integer"/>
		<result column="name" property="name" javaType="java.lang.String"/>
		<result column="birth_date" property="birthDate" javaType="java.util.Date"/>
	</resultMap>

마이바티스는 getter setter 로 작동하기 떄문에 객체생성이 우선된다. 그러므로 매개값없는 생성자는 반드시 필요하다.