ETC
MyBatis에서 ENUM 다루기
버스는그만
2023. 9. 17. 15:10
Enum
- 테스트용으로 간단하게 생성해본다.
public enum TestEnum {
FIRST, SECOND
}
TypeHandler 커스텀
- 마이바티스가 PreparedStatement에 파라미터를 설정하고 ResultSet에서 값을 가져올때마다 TypeHandler는 적절한 자바 타입의 값을 가져오기 위해 사용된다. 다음의 표는 디폴트 TypeHandlers를 설명한다.(공식문서)
- @MappedJdbcTypes: Mybatis는 DB와 서버간의 데이터 타입 간의 매핑을 정의할 떄 사용
- 제일 아래의 메서드에서 CallableStatement는 Mybatis에서 프로시저를 관리하는 역할이다.
@MappedJdbcTypes(JdbcType.VARCHAR)
public class TestTypeHandler extends BaseTypeHandler<TestEnum> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, TestEnum parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.name());
}
@Override
public TestEnum getNullableResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
if(Objects.isNull(value)) {
return null;
}
return TestEnum.valueOf(value);
}
@Override
public TestEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String value = rs.getString(columnIndex);
if(Objects.isNull(value)) {
return null;
}
return TestEnum.valueOf(value);
}
@Override
public TestEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex);
if (value == null) {
return null;
}
return TestEnum.valueOf(value);
}
}
TypeHandler 등록(.yml)
mybatis:
mapper-locations: classpath:/mapper/*-mapper.xml
type-handlers-package: com.example.demo.test.typehandler
- mybatis.type-handlers-package에 Typehandler가 있는 패키지를 등록해주면 된다.