- MyBatis SQL : resultMap 구문
복잡한 결과 매핑을
간편하게 만들어주기 위해 만들어진 엘리먼트
resultMap 엘리먼트는 마이바티스에서 가장 중요하고 강력한 엘리먼트이다.
먼저 Map 형식을 쓰기 위해 객체 "User"를 임의로 정의하였다.
package com.someapp.model;
public class User {
private int id;
private String username;
private String hashedPassword;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getHashedPassword() {
return hashedPassword;
}
public void setHashedPassword(String hashedPassword) {
this.hashedPassword = hashedPassword;
}
}
위 클래스는 3개의 프로퍼티(id, username, hashedPassword)를 가진다. 이 프로퍼티는 select 구문에서 칼럼명과 정확히 일치한다. 그래서 자바빈은 HashMap과 마찬가지로 매우 쉽게 ResultSet에 매핑될 수 있다.
<select id="selectUsers" resultType="com.someapp.model.User">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
TypeAliases를 사용하면 타이핑 수를 줄일 수 있다.
<!-- XML설정파일에서 -->
<typeAlias type="com.someapp.model.User" alias="User"/>
<!-- SQL매핑 XML파일에서 -->
<select id="selectUsers" resultType="User">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
만약 칼럼명이 프로퍼티명과 다르다면 SQL 구문에 별칭을 지정할 수 있다.
<select id="selectUsers" resultType="User">
select
user_id as "id",
user_name as "userName",
hashed_password as "hashedPassword"
from some_table
where id = #{id}
</select>
데이터베이스 별칭을 사용하는 것과 다른 방법으로 명시적인 resultMap 을 선언하는 방법도 있다.
→ id는 기본키, result는 기본키가 아닌 값을 지정할 때 사용한다.
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="hashedPassword" column="hashed_password"/>
</resultMap>
<select id="selectUsers" resultMap="userResultMap">
select user_id, user_name, hashed_password
from some_table
where id = #{id}
</select>