[ MyBatis3 ] SQL Map XML 파일(resultMap)

# resultMap

- MyBatis에서 가장 중요하고 강력한 요소이다. ResultSet에서 데이터를 가져올 때 작성되는 JDBC코드를 대부분 줄여주는 역할을 담당한다.

- 모든 칼럼의 값이 결과가 되는 간단한 구문에서는 HashMap에서 키 형태로 자동으로 매핑된다, 하지만 대부분의 경우 HashMap은 매우 좋은 도메인 모델이 되지는 못한다.

- 그래서 대부분 도메인모델로는 자바빈이나 POJO를 사용할 것이다.

- TypeAliases가 편리한 기능임을 기억해두는게 좋다. TypeAliases를 사용하면 타이핑 수를 줄일 수 있다.
<typeAlias type="com.someapp.model.User" alias="User"/>

<select id ="selectUsers" parameterType="int" resultType="User">
</select>

- 칼럼명이 프로퍼티명과 다르다면
  1. SQL 구문에 별칭을 지정

    <select id ="selectUsers" parameterType ="int" resultType ="User">
    select
    user_id as "id"
    user_name as "userName"
    from some_table
    </select>


  2. 명시적인 resultMap을 선언하는 방법

    <resultMap id ="userResultMap" type="User">
    <id property ="id" column="user_id" />
    <result property ="username" column="username" />
    </resultMap>

    <select id = "selectUsers" parameterType ="int" resultType ="userResultMap">
    select user_id, user_name
    from some_table
    </select>

- resultMap요소는 많은 하위 요소를 가진다. 다음은 resultMap요소의 개념적인 뷰이다.

  • constructor - 인스턴스화 되는 클래스의 생성자에 결과를 삽입하기 위해 사용
  • id - ID 결과, ID와 같은 결과는 전반적으로 성능을 향상시킴
  • result - 필드나 자바빈 프로퍼티에 삽입되는 일반적인 결과
  • association - 복잡한 타입의 연관관계; 많은 결과는 타입으로 나타난다.
  • collection - 복잡한 타입의 컬렉션
  • discriminator - 사용할 resultMap을 판단하기 위한 결과값을 사용

> 가장 좋은 형태는 매번 resultMap을 추가해서 빌드한다.