
resultMap
resultMap 엘리먼트의 하위 엘리먼트 선언 순서
constructor > id >result> association> collection> discriminaotr
?:0개 또는 1개
*:0개 이상
cache : SELECT 명령의 검색결과를 Cache 메모리에 저장하여 빠른 검색결과를 제공하는 엘리먼트
→INSERT, UPDATE, DELETE 명령이 실행되면 Cache 메모리에 저장된 검색결과는 자동 초기화
→검색결과를 저장하는 클래스는 반드시 객체 직렬화 클래스로 설정
객체 직렬화를 하기위해 Serialrize 클래스를 상속 받아야한다.
객체 직렬화 클래스 : Serializable 인터페이스를 상속받는 클래스
→객체 단위로 입력 또는 출력을 위한 클래스 선언하는 방법
discriminator : 검색행의 컬럼값을 비교하여 다른 매핑정보를 제공하기 위한 상위 엘리먼트
→ 하위 엘리먼트 : case 엘리먼트
javaType 속성 : 비교 컬럼값에 대한 java 자료형을 속성값으로 설정
column 속성 : 비교 컬럼값이 저장된 컬럼명을 속성값으로 설정
case : 검색행의 컬럼값을 비교하여 같은 경우 매핑 정보를 제공하기 위한 엘리먼트
value 속성 : 검색행의 컬럼값과 비교할 값을 속성값으로 설정
권한을 통해 다른 값을 보여주기 위해서 사용
공통적인 매핑정보는 discriminator 엘리먼트가 아닌 다른 엘리먼트를 이용하여 매핑 처리
extends 속성 : resultMap 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정
→resultMap 엘리먼트의 매핑정보를 상속받아 사용
SQL 명령에 필요한 값을 전달받는 방법
→ 전달값은 SQL 명령에서 #{변수명|필드명|맵키} 형식으로 표현
1.XML 맵퍼에서 SQL 명령이 등록된 엘리먼트의 parameterType 속성값으로 Java 자료형(별칭)을 이용하여 값을 전달받아 사용
→parameterType 속성값으로 기본형(Wrapper) 또는 String 클래스를 설정
→parameterType 속성값으로 DTO 클래스 설정 - 다수값(필드명)
→parameterType 속성값으로 HashMap 클래스(Map 인터페이스) 설정 - 다수값(맵키)
2.Interface 맵퍼에서 추상메소드의 매개변수 Param 어노테이션을 설정하여 값을 전달받아 XML 맵퍼의 엘리머트에 등록된 SQL 명령에서 전달값 사용
→XML 맵퍼의 SQL 명령이 등록된 엘리먼트에서는 parameterType 속성 생략
select 엘리먼트의 resultType 속성값을 HashMap 클래스(Map 인터페이스)로 설정하면 검색행의 컬럼명은 맵키로 컬럼값은 맵값으로 매핑하여 엔트리로 저장하여 검색결과 제공 ㄸ
interface 맵퍼 추상매개변수에 저잔달된 값을 @Param 어노테이션의 value 속성값을 #{속성값}으로 표현
@ param : 추상메소드의 매개변수에 저장된 값을 XML 맵퍼의 엘리먼트에 등록된 SQL 명령에 사용할 수 있도록 제공하는 어노테이션
→ value 속성 : SQL 명령에서 매개변수
검색 컬럼명과 검색 단어를 전달받아 MYHEWON 테이블에 저장된 회원정보 중 검색 컬럼에 검색 단어가 저장된 회원정보를 검색하여 검새결과를 제공하는 엘리먼트.
resultMap상속
값을 전달하는 방법
Map으로 반환하는 방법ㅈ
resultMap 엘리먼트의 하위 엘리먼트 선언 순서
- constructor >> id >> result >> association >> collection >> discriminator
resultMap 주의사항
- association 엘리먼트로 매핑 설정을 시작한 경우 내부적으로 모든 매핑 설정을 selectOne() 메소드로 단일행의 검색결과를 제공받아 매핑 처리
→문제점)resultMap 엘리먼트에서 association 엘리먼트로 매핑 설정을 시작한 경우에 collection 엘리먼트를 선언하면 다수행의 검색결과에 대한 매칭 처리 불가능(TooManyResultsException 발생)
→해결법)resultMap 엘리먼트에서 association 엘리먼트가 아닌 다른 엘리먼트로 매핑이 시작되도록 설정
<resultMap type="MyCommentReplyUser" id="myCommentReplyUserResultMap">
<id column="comment_no" property="commentNo"/>
<result column="comment_id" property="commentId"/>
<result column="comment_content" property="commentContent"/>
<result column="comment_date" property="commentDate"/>
<association property="user" javaType="MyUser">
<id column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
</association>
<collection property="replies" ofType="MyReplyUser">
<association property="reply" javaType="MyReply">
<id column="reply_no" property="replyNo"/>
<result column="reply_id" property="replyId"/>
<result column="reply_content" property="replyContent"/>
<result column="reply_date" property="replyDate"/>
<result column="reply_comment_no" property="replyCommentNo"/>
</association>
<association property="user" javaType="MyUser">
<id column="reply_user_id" property="userId"/>
<result column="reply_user_name" property="userName"/>
</association>
</collection>
</resultMap>
'일상 > 일기장' 카테고리의 다른 글
TIL.22.03.03 - Spring : 환경설정, Log (0) | 2022.03.04 |
---|---|
TIL22.03.02 - MyBatis : 동적 SQL (0) | 2022.03.03 |
TIL22.02.25 - MyBatis : join (0) | 2022.02.25 |
TIL.22.02.24 - Mybatis : 인터페이스 맵퍼, XML 맵퍼, 맵퍼 바인딩 (0) | 2022.02.25 |
TIL20.01.24 (0) | 2022.01.24 |
댓글