-
[Spring] MyBatis의 resultMap 살펴보기Back-End/Spring Legacy 2023. 5. 24. 14:20
📑 resultMap이란?
resultMap이란 myBatis에서 제공하는 자동 매핑으로 해결이 어려운 경우를 위해 구조를 설계할 수 있도록 만들어진 구조이다.
📑 클래스 객체 필드명과 테이블 컬럼명이 다를 때
클래스 객체가 다음과 같을 때
@Getter @Setter public class User { private int id; private String username; private String hashedPassword; }
map 형태로 값을 매핑해서 조회하는 구문이 있다.
<select id="selectUsers" resultType="User객체경로.User"> select id, username, hashedPassword from some_table where id = #{id} </select>
만약 테이블 컬럼명과 클래스 객체의 필드명이 동일할 경우 문제 없이 값이 매핑된다.
하지만 만약 쿼리문이 아래와 같이 달라진다면 ?? 물론 AS 키워드를 이용해 매핑할 수 있다. 그러나 매칭되는 타입(number->String)이 다르거나 필드명이 바뀐다거나,,, 그럴 때는 매핑할 수 없게 된다. 이때 사용하는 것이 resultMap이다.
<select id="selectUsers" resultType="User객체경로.User"> select user_id, user_name, hashed_password from some_table where id = #{id} </select>
아래와 같이 resultMap을 적용해보자.
<resultMap id="testMap" type="User객체경로.User"> <result column="user_id" property="id" jdbcType="NVARCHAR" javaType="String"/> <result column="user_name" property="username" jdbcType="NVARCHAR" javaType="String"/> <result column="hashed_password" property="hashedPassword" jdbcType="NVARCHAR" javaType="String"/> </resultMap> <select id="selectUsers" resultMap="testMap"> select user_id, user_name, hashed_password from some_table where id = #{id} </select>
테이블 컬럼명은 column에 적고 클래스 필드명을 property에 적고 <select> 태그는 resultMap 속성을 지정하면 된다.
📑 계층형 데이터구조
http://www.sysout.co.kr/home/webbook/page/read/643;jsessionid=54B3D5320E73A41FC4088D5E3D322141
반응형'Back-End > Spring Legacy' 카테고리의 다른 글
[6-ch21~22 Spring ] 파일 업로드 방식 ( 중복처리, 섬네일 ,, ) (0) 2023.05.10 [MyBatis] 동적 쿼리 trim 문법 알아보기 (0) 2023.04.17 [Spring] Log4j2 환경설정 , (+ log.info 에러 ) (0) 2023.04.04 [jsp] <%@ include%>와 jsp:include 차이 (0) 2022.11.30 [Spring MyBatis] selectKey 사용하기 (0) 2022.11.17