[java] MyBatis 커스텀 타입 핸들러

MyBatis는 자바 객체와 SQL 데이터베이스 간의 매핑을 처리하는 ORM(Object Relational Mapping) 프레임워크입니다. 기본적으로 MyBatis는 자바의 기본 데이터 타입과 SQL의 데이터 타입 사이의 매핑을 자동으로 처리해줍니다. 그러나 때로는 사용자 정의한 데이터 타입에 대한 매핑을 직접 처리해야 할 때가 있습니다.

이때 MyBatis는 커스텀 타입 핸들러를 통해 사용자 정의 데이터 타입의 매핑을 처리할 수 있도록 지원합니다. 커스텀 타입 핸들러는 MyBatis를 확장하여 사용자가 원하는 타입에 대한 매핑 로직을 제공할 수 있는 인터페이스입니다.

커스텀 타입 핸들러 구현하기

커스텀 타입 핸들러를 구현하기 위해서는 다음과 같은 단계를 따라야 합니다.

  1. org.apache.ibatis.type.TypeHandler 인터페이스를 구현합니다.
  2. 구현한 핸들러를 MyBatis 설정 파일에 등록합니다.

아래는 org.apache.ibatis.type.TypeHandler 인터페이스를 구현한 예시입니다.

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CustomTypeHandler extends BaseTypeHandler<CustomType> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, CustomType parameter, JdbcType jdbcType)
            throws SQLException {
        ps.setString(i, parameter.toString());
    }

    @Override
    public CustomType getNullableResult(ResultSet rs, String columnName)
            throws SQLException {
        String value = rs.getString(columnName);
        return CustomType.fromValue(value);
    }

    // 나머지 메서드는 생략

}

위 코드에서 CustomType은 사용자 정의한 데이터 타입을 나타냅니다. setNonNullParameter 메서드에서는 자바 객체를 JDBC PreparedStatement에 설정하고, getNullableResult 메서드에서는 SQL 결과셋을 CustomType 객체로 변환합니다.

커스텀 타입 핸들러 등록하기

커스텀 타입 핸들러를 등록하기 위해서는 MyBatis 설정 파일에 핸들러를 추가해야 합니다. 아래는 MyBatis 설정 파일의 예시입니다.

<configuration>
    <!-- 기존 설정 -->

    <typeHandlers>
        <typeHandler handler="com.example.CustomTypeHandler"/>
    </typeHandlers>

    <!-- 기존 설정 -->
</configuration>

위 코드에서 com.example.CustomTypeHandler는 앞서 구현한 커스텀 타입 핸들러의 패키지 경로를 나타냅니다. typeHandlers 섹션에 핸들러를 추가하여 MyBatis가 커스텀 타입에 대한 매핑을 처리할 수 있도록 설정합니다.

이제 MyBatis는 사용자 정의한 데이터 타입에 대한 매핑을 커스텀 타입 핸들러를 통해 처리할 수 있습니다.

마무리

MyBatis의 커스텀 타입 핸들러는 사용자가 정의한 데이터 타입에 대한 매핑을 처리하는 강력한 기능입니다. 앞서 설명한 방법을 따라 커스텀 타입 핸들러를 구현하고 등록하면 MyBatis가 자동으로 사용자 정의 타입에 대한 매핑을 처리할 수 있습니다. 자세한 내용은 MyBatis 공식 문서를 참고하세요.

해당 기능을 사용하면 MyBatis를 더욱 유연하게 활용할 수 있으며, 코드의 가독성과 유지 보수성을 높일 수 있습니다.