자바
resultType과 resultMap 차이
chantleman
2024. 9. 1. 15:40
- resultType
: Mybatis에서 SQL 쿼리의 결과를 매핑할 때 사용할 클래스의 타입을 지정하는 속성.
이 속성에 지정된 클래스의 인스턴스로 결과를 매핑.
SQL 쿼리 결과를 특정 클래스 타입으로 매핑하는 속성으로 간단한 매핑에 사용.
결과의 컬럼 이름과 클래스의 필드 이름이 일치해야 함
예시 ↓
<select id="getUser" resultType="User">
SELECT id, name, email FROM users WHERE id = #{id}
</select>
여기서 user 클래스는 id, name, email 필드를 가지고 있어야함
참고로 insert, update, delete 태그의 resultType은 생략가능합니다. (int로 반환하기때문)
- resultMap
: MyBatis에서 SQL 쿼리의 결과를 매핑할 때, 컬럼과 객체의 프로퍼티 간의 매핑을 정의하는 더 세밀한 방법.
복잡한 매핑에 사용되며, DB에서 설정한 컬럼명과 VO에서 설정한 프로퍼티 이름이 다를 경우 사용
예시 ↓
<resultMap id="userMap" type="User">
<result property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
<select id="getUser" resultMap="userMap">
SELECT user_id, user_name, user_email FROM users WHERE user_id = #{id}
</select>
여기서 user 클래스는 id, name, email 필드를 가지고 있으며, 데이터베이스의 컬럼명과 매핑이 다를 때 resultMap을 사용하여 정확히 매핑함
DB에서 설정한 컬럼명은 이와 같이 스네이크 표기법(단어와 단어사이 언더바 사용)으로 설정했지만
자바에서는 카멜 표기법(소문자로 작성후 이어지는 새 단어의 앞자리는 대문자 사용)으로 사용하기 때문에
자바 vo에서 get, set 설정할 때 프로퍼티명을 카멜표기법으로 바꿔주었습니다.
하지만 이렇게 되면 xml에서 쿼리 작성할 때 컬럼명과 일치하지 않는 문제가 발생하기 때문에
resultMap을 사용하여 프로퍼티명과 컬럼명을 매핑시켜줘야합니다.
728x90