MyBatis

association , constructor

Jungsoomin :) 2020. 9. 18. 12:48

association 은 1:N의 관계에서 1 을 나타낸다. 

 

constructor 는 생성자를 이용한 객체 맵핑을 이야기하며 , 생성후 세터를 부르는 것보다 빠를 것이라 생각한다.

 

id는 각 네임스페이스의 구분자<<<<네임스페이스의 구분자라는 내용이 굉장히 중요.

 

그러므로 각 마스터 테이블은 1개의 id를 가지는 것이 가장 올바르며 바람직하다.

 

discriminator 는 필수여부로 취급되는 듯 하며 , <constructor> 의 idArg 부분도 필수여부로 취급되는 듯하다. 

그러므로 테이블 매핑시 컬럼기재를 해줘야 맵핑이 되더라.

<resultMap id="replyResultMap"
		type="www.study.com.bulletinboard.model.ReplyVO">
 		<!-- <constructor>
			<idArg column="hierarchy_id" javaType="String" jdbcType="VARCHAR"/>
		</constructor> -->
<!-- id : namespace에서 식별자로 구동. Master 2 Master 와의 association 관계까지 
함께 읽어들일 때는 namespace를 분리하세요!
Master Table 당 하나의 Mapper를 만들어야합니다.
 -->		
		<id property="hierarchyId" column="hierarchy_id" javaType="String" />
		<result property="content" column="content" />
		<result property="regDate" column="reg_date" />
		<result property="updateDate" column="update_date" />
	
		<!-- 다른 Mapper.xml에서 정의된  resultMap을 활용하는 방법 --> <!-- 1:N -->
		<association  property="writer" columnPrefix="m_" resultMap="www.study.com.party.mapper.PartyMapper.partyResultMap"/>

		<!-- 구분자 -->
		<discriminator javaType="String" column="post_type">
			<case value="POST" resultMap="postResultMap" />
		</discriminator>
	</resultMap>

이런 식으로, 명시되어 있는 컬럼 들을 찝어 m_컬럼 프리픽스를 던져주었다.

<select id="searchPost" resultMap="replyResultMap">
		select p.*,m.login_id m_login_id, m.pwd m_pwd,m.party_type m_party_type<!-- 컨스트럭터 디스크리미네이터는 필수여부라 무조건 컬럼으로 뺸다 -->
		  from m_post2tag mpt, t_post p, t_party m
		 where mpt.tag_id in (
			select id
			  from t_hashtag 
			 where tag in 
			 		<foreach collection="arrUserSearch" item="searchWord" open="(" separator="," close=")">
			 		    #{searchWord}
			 		</foreach>
	         ) 
		and mpt.post_id = p.hierarchy_id	 
		and p.writer_id = m.login_id
	</select>