Backend/mybatis

[mybatis]resultMap 하위 엘리먼트 - constructor 엘리먼트

sukii 2024. 3. 7. 18:18
반응형

resultMap에는 6가지 하위 엘리먼트가 있음. 이 엘리먼트들을 사용할 때는 순서가 정해져있다.

순서를 안지키면 에러남!

순서: constructor, id, result, association, collection, discriminator

 

id와 result 엘리먼트는 여기 아래에 설명해놨음(해결법3 참고)⬇️

2024.03.06 - [Java/mybatis] - [mybatis]수동 매핑 & resultMap 엘리먼트(컬럼명과 DTO파일 필드명 다를 때)

 

[mybatis]수동 매핑 & resultMap 엘리먼트(컬럼명과 DTO파일 필드명 다를 때)

resultType 속성을 사용하면 resultType 속성값으로 설정된 클래스로 객체를 생성하여 검색행의 컬럼값을 같은 이름의 객체 필드값으로 자동 저장하여 제공 - 자동 매핑 문제점 : 검색행의 컬럼명과 re

sukis.tistory.com

 

그럼 어떻게 해야하냐! 생성자를 이용해 필드값을 초기화 처리 해줘야 한다!

그걸 constructor 엘리먼트로 할 수 있다.

 

🤔constructor 엘리먼트

이를 사용하여 type 속성값으로 설정된 클래스의 매개변수가 작성된 생성자로 객체를 생성하고 생성자 매개변수로 검색행의 컬럼값을 전달받아 객체 필드값으로 저장되도록 초기화 처리 
=> resultMap 엘리먼트의 하위 엘리먼트로 constructor 엘리먼트를 0개 또는 1개만 작성 가능

=> 하위 엘리먼트 : idArg 엘리먼트 또는 arg 엘리먼트 사용 
=> 생성자 매개변수의 개수와 constructor 엘리먼트의 하위 엘리먼트 개수 및 자료형이반드시 같도록 작성

 

🔸idArg : 검색행의 컬럼값을 생성자 매개변수에 전달하기 위한 엘리먼트
=> PK 제약조건이 설정된 컬럼값을 제공받아 매개변수에 전달하기 위해 사용
▪️ column 속성 : 검색행의 컬럼명을 속성값으로 설정

▪️ javaType 속성 : 검색행의 컬럼값이 저장된 매개변수의 Java 자료형을 속성값으로 설정
=> Java 자료형 대신 typeAlias 엘리먼트로 설정한 별칭(AliasName) 사용 가능

🔸arg : 검색행의 컬럼값을 생성자 매개변수에 전달하기 위한 엘리먼트

<resultMap type="MyComment2" id="myComment2ConstructorResultMap">
		<!-- constructor : resultMap 엘리먼트의 type 속성값으로 설정된 클래스의 생성자를
		사용하여 매핑 처리하기 위한 정보를 제공하는 엘리먼트 -->
		<constructor>
			<idArg column="comment_no" javaType="_int"/>
			<arg column="comment_id" javaType="string"/>
			<arg column="comment_content" javaType="string"/>
			<arg column="comment_date" javaType="string"/>
		</constructor>
		
	<select id="selectCommentList2" resultMap="myComment2ConstructorResultMap">
		select comment_no, comment_id, comment_content, comment_date from mycomment order by comment_no desc
    </select>

 

아래와 같이 constructor 엘리먼트와 id 엘리먼트(result 엘리먼트)를 같이 사용하여 검색행의 컬럼값이 객체 필드에 저장되도록 설정 가능
=> constructor 엘리먼트 뒤에 id 엘리먼트(result 엘리먼트) 작성(순서 지키기 꼭!)

<resultMap type="MyComment2" id="myComment2ConstructorResultMap">
		<!-- constructor : resultMap 엘리먼트의 type 속성값으로 설정된 클래스의 생성자를
		사용하여 매핑 처리하기 위한 정보를 제공하는 엘리먼트 -->
		<constructor>
			<idArg column="comment_no" javaType="_int"/>
			<arg column="comment_id" javaType="string"/>
		</constructor>
		
		<result column="comment_content" property="content"/>
		<result column="comment_date" property="date"/>
	</resultMap> 
	
	<select id="selectCommentList2" resultMap="myComment2ConstructorResultMap">
		select comment_no, comment_id, comment_content, comment_date from mycomment order by comment_no desc
    </select>
반응형