[Mybatis] TypeHandler 개념과 예제
TypeHandler
는 MyBatis에서 데이터베이스의 데이터 타입과 자바 객체의 필드 타입 간의 매핑을 커스터마이징하기 위한 인터페이스입니다. 데이터베이스의 특정 데이터 타입과 자바 객체 간에 변환 로직을 정의하여 사용할 수 있습니다. 아래는 TypeHandler
의 개념과 예제입니다.
예제: Custom TypeHandler
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CustomStringTypeHandler implements TypeHandler<String> {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
if (s != null) {
preparedStatement.setString(i, s.toUpperCase());
} else {
preparedStatement.setNull(i, jdbcType.TYPE_CODE);
}
}
@Override
public String getResult(ResultSet resultSet, String columnName) throws SQLException {
return resultSet.getString(columnName).toLowerCase();
}
@Override
public String getResult(ResultSet resultSet, int columnIndex) throws SQLException {
return resultSet.getString(columnIndex).toLowerCase();
}
@Override
public String getResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
return callableStatement.getString(columnIndex).toLowerCase();
}
}`
위의 예제에서는 TypeHandler<String>
인터페이스를 구현하여 String
타입의 커스텀 매핑을 정의하고 있습니다. setParameter
메서드를 오버라이드하여 데이터베이스에 값을 설정할 때 대문자로 변환하여 저장하도록 하였고, getResult
메서드를 오버라이드하여 조회 결과를 소문자로 변환하여 반환하도록 하였습니다.
TypeHandler
를 사용하기 위해서는 매퍼 XML 파일에서 해당 TypeHandler
를 등록해주어야 합니다.
매퍼 XML 파일:
BookMapper.xml
:
<typeHandlers>
<typeHandler handler="com.example.CustomStringTypeHandler"/>
</typeHandlers>
<select id="selectBookTitle" resultType="String">
SELECT title FROM books WHERE id = #{id}
</select>`
위의 예제에서는 CustomStringTypeHandler
를 등록하고, 매퍼 XML 파일에서 해당 TypeHandler
를 사용하여 커스텀 타입 매핑을 적용하고 있습니다.
이렇게 하면 데이터베이스의 값과 자바 객체의 값을 변환하거나 가공하는 로직을 TypeHandler
를 통해 커스터마이징할 수 있습니다.