[java] MyBatis에서 결과 매핑하기

MyBatis는 자바 객체와 데이터베이스의 결과를 매핑하는데 사용되는 강력한 ORM(Object-Relational Mapping) 프레임워크입니다. 이를 통해 개발자는 SQL 쿼리를 작성하고, MyBatis는 해당 쿼리 결과를 자동으로 매핑하여 자바 객체로 반환합니다.

이번 포스트에서는 MyBatis에서 결과를 매핑하는 방법에 대해 알아보겠습니다.

1. 결과를 매핑할 클래스 정의

MyBatis에서 결과를 매핑할 클래스는 일반적으로 데이터베이스의 테이블과 매핑됩니다. 해당 테이블의 컬럼들과 동일한 필드를 가지는 자바 클래스를 정의해야 합니다.

public class User {
    private int id;
    private String name;
    private int age;

    // getter and setter methods
    // ...
}

위의 예제에서 User 클래스는 데이터베이스의 ‘users’ 테이블과 매핑됩니다. ‘users’ 테이블은 id, name, age라는 컬럼을 가지므로, User 클래스에도 해당 필드들을 정의해야 합니다.

2. 매핑 구성하기

다음으로는 MyBatis에서 결과를 매핑하기 위해 SQL 매핑 구성을 설정해야 합니다. MyBatis는 XML 또는 어노테이션을 사용하여 매핑을 정의할 수 있습니다.

2.1 XML을 사용한 매핑 설정

<!-- user.xml 파일 -->

<resultMap id="userMap" type="com.example.User">
    <id property="id" column="id" />
    <result property="name" column="name" />
    <result property="age" column="age" />
</resultMap>

<select id="getUser" resultMap="userMap">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>

위의 예제에서는 <resultMap> 요소를 사용하여 결과를 매핑하는데 필요한 정보들을 정의했습니다. <resultMap> 요소의 id 속성은 매핑 구성을 식별하기 위한 고유한 식별자입니다. type 속성은 매핑 구성을 사용하여 매핑할 자바 객체의 클래스를 지정합니다.

<id> 요소와 <result> 요소는 각각 PK(주키)와 나머지 컬럼들에 대한 매핑을 정의하는데 사용됩니다. property 속성은 매핑할 자바 객체의 필드 이름을, column 속성은 매핑할 테이블의 컬럼 이름을 나타냅니다.

<select> 요소에서 resultMap 속성에 정의한 매핑 구성을 참조하여 결과를 매핑합니다.

2.2 어노테이션을 사용한 매핑 설정

@Results({
    @Result(property = "id", column = "id"),
    @Result(property = "name", column = "name"),
    @Result(property = "age", column = "age")
})
@Select("SELECT id, name, age FROM users WHERE id = #{id}")
User getUser(int id);

위의 예제에서는 @Results 어노테이션을 사용하여 매핑 구성을 정의했습니다. @Result 어노테이션은 필드와 컬럼 간의 매핑을 설정하는데 사용됩니다. property 속성은 매핑할 자바 객체의 필드 이름을, column 속성은 매핑할 테이블의 컬럼 이름을 나타냅니다.

@Select 어노테이션은 실행할 SQL 쿼리를 정의합니다.

3. 결과를 매핑하여 사용하기

매핑 설정이 완료되면 MyBatis는 결과를 자동으로 매핑하여 자바 객체로 반환합니다.

User user = sqlSession.selectOne("getUser", 1);
System.out.println(user.getId());   // 1
System.out.println(user.getName()); // "John"
System.out.println(user.getAge());  // 25

위의 예제에서는 selectOne() 메서드를 사용하여 SQL 쿼리를 실행하고, 결과를 매핑한 User 객체를 반환합니다. 이후 자바 객체의 필드 값을 활용하여 원하는 작업을 수행할 수 있습니다.

매핑 설정에 따라 결과를 매핑할 때 주의할 점은 컬럼과 필드의 이름이 일치해야 한다는 것입니다. MyBatis는 컬럼과 필드의 이름을 기준으로 매핑을 수행하기 때문에, 이름이 다를 경우에는 별도의 매핑 설정이 필요합니다.

이상으로 MyBatis에서 결과를 매핑하는 방법에 대해서 알아보았습니다. MyBatis의 강력한 매핑 기능을 활용하면 SQL 쿼리 결과를 쉽게 자바 객체로 변환할 수 있습니다.

참고 자료