mybatis연동 시 상태값을 enum으로 설정 시 작업 하는 방법 sql-mapper-config.xml 에 타입 핸들러 설정 및 사용하고자 하는 bean의 데이터를 설정
package utils;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import egovframework.comm.TempVO.Status;
public class StatusEnumTypeHandler implements TypeHandler{
private static final Logger log = LoggerFactory.getLogger(StatusEnumTypeHandler.class);
@Override
public void setParameter(PreparedStatement ps, int i, Status parameter,
JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.getCode());//<-데이터 가공
}
@Override
public Status getResult(ResultSet rs, String columnName)
throws SQLException {
int code = rs.getInt(columnName);
return Status.getEnumByCode(code);//<-데이터 가공
}
@Override
public Status getResult(ResultSet rs, int columnIndex)
throws SQLException {
int code = rs.getInt(columnIndex);
return Status.getEnumByCode(code);//<-데이터 가공
}
@Override
public Status getResult(CallableStatement cs, int columnIndex)
throws SQLException {
int code = cs.getInt(columnIndex);
return Status.getEnumByCode(code);//<-데이터 가공
}
}
bean에 해당하는 프로퍼티 생성 후 사용
package egovframework.comm;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
public class TempVO implements Serializable {
private static final long serialVersionUID = 1L;
/** 전송상태 */
private Status status;
public SendHistVO() {}
public SendHistVO(Status status) {
this.status = status;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public enum Status {
FAILED(0, "실패"), WAITING(1, "대기"), RESERVATION(2, "예약"), SUCCESS(9, "성공");
private int code;
private String text;
private Status(int code, String text) {
this.code = code;
this.text = text;
}
@JsonValue
public int getCode() {
return code; //디비에 저장할때 사용
}
public String getText() {
return text;
}
//디비에서 데이터 가지고 올때 사용
@JsonCreator
public static Status getEnumByCode(int code) {
Status[] values = values();
for(Status value : values) {
if(value.getCode() == code) {
return value;
}
}
return null;
}
}
}
TempVO 의 status 값을 mybatis에서 사용하는 경우 StatusEnumTypeHandler 의 메소드를 이용해서 데이터를 가공 해서 가지고 오게 동작 하게 됩니다.