본문 바로가기
Programming

[Mybatis] resultMap과 resultType

by BTC_아리 2023. 9. 27.

베하!

안녕하세요 여러분 추석이 다가오고 있습니다!

9월은 잘 보내셨나요?

오늘은 Mybatis의 resultMap과 resultType의 차이점에 대해 알아보겠습니다.


Mybatis

우선 Mybatis란, 자바 객체와 SQL 결과를 매핑하는 데 사용되는 강력한 ORM(Object-Relational Mapping) 프레임워크입니다. MyBatis를 사용하면 SQL 쿼리의 결과를 자바 객체로 변환하거나, 자바 객체를 SQL 파라미터로 전달할 수 있습니다. 이를 가능하게 하는 두 가지 중요한 설정 옵션은 resultMapresultType입니다.

 

resultType

resultType은 SQL 쿼리의 결과를 단일 자바 객체로 매핑하는 데 사용됩니다. 이 자바 객체는 일반적으로 POJO(Plain Old Java Object) 형태이며, MyBatis가 쿼리 결과를 자동으로 해당 객체로 매핑합니다.

즉, Mybatis에서 쿼리문의 결과를 resultType으로 반환합니다.

예시는 다음과 같습니다.

<select id="selectTest" resultType="com.test.User">

   ...

</select>

이는 selectTest문의 결과값을 com.test.User클래스의 객체로 반환하는 것입니다.

 

만약, resultType으로 단순히 하나의 int를 반환하고 싶다면 다음과 같이 작성할 수 있습니다.

<select id="selectTest" resultType="int">

   ...

</select>

 

resultType 의 장점은 간단하고 빠른 설정이 가능하다는 것입니다. 단일 객체를 반환하기 때문에 결과 매핑이 간단합니다.

하지만 resultType의 단점은 복잡한 데이터 모델을 다룰 때 유연성이 부족하다는 것입니다. 그러한 부분을 메꾸어줄 수 있는 것이 resultMap입니다.

 

resultMap

resultMap은 주로 하나 이상의 결과를 여러 객체에 매핑하거나, 복잡한 데이터 구조를 다루기 위해 사용됩니다. resultMap을 사용하려면 먼저 resultMap을 정의하고, 그 안에서 어떤 결과가 어떤 객체에 매핑되어야 하는지 세부적으로 정의해야 합니다.

다음은 예시입니다.

<resultMap id="userResultMap" type="com.test.User">
  <result property="id" column="user_id" />
  <result property="username" column="user_name" />
  <result property="email" column="user_email" />
</resultMap>

<select id="selectTest" resultMap="userResultMap">
   SELECT user_id
        , user_name
        , user_email 
     FROM users
</select>

resultMap=”  ” 사이에 resultMap의 id를 넣어줍니다. sql문의 결과로 반환된 user_id는 id로 일치시킬 수 있습니다.

resultMap을 통해 각 열(column)과 클래스의 속성(property)을 일치시는 것입니다.

 

resultMap 의 장점은 복잡한 데이터 모델을 다룰 수 있다는 점입니다. 여러 테이블 간의 조인 결과를 객체로 매핑할 수 있습니다.

반대로 단점은 resultType에 비해서 코드가 길어진다는 점입니다.

 

언제 무엇을 선택해야 할까?

  • resultType: 단일 객체를 반환하고 간단한 쿼리 결과를 다룰 때 사용 : 단순한 데이터 구조나 단일 테이블을 다루는 경우에 유용합니다.
  • resultMap: 복잡한 데이터 구조나 복수의 테이블을 다룰 때 사용 : 조인 결과를 객체로 매핑하거나 결과를 여러 객체로 분할해야 하는 경우에 유용합니다.

이렇게 Mybatis를 사용할 때, 쿼리 결과를 반환받을 수 있는 방법에 대해서 알아보았습니다.

하나하나 알아가는 과정이 참 즐겁네요.

그럼 즐거운 코딩하세요! 안녕!

 

댓글