[mybatis]resultMap 하위 엘리먼트 - constructor 엘리먼트
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>