java中自定義列舉enum對映到mysql資料庫欄位處理器handler
阿新 • • 發佈:2019-04-10
mybatis中預設的處理列舉型別的handler有
如果要處理一些特殊的情況下欄位內容欄位的轉換,需要自定義處理器,比如如下例子要處理資料庫中預設欄位值為""空字串的問題
import org.apache.commons.lang.StringUtils;
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;
/**
* @author
* @date 2019/4/9 18:13
* description:解決資料庫預設""無法對應到Enum的問題
*/
public class RepaidTypeEnumHandler<E extends Enum<E>> extends BaseTypeHandler<E> {
private Class<E> type;
public RepaidTypeEnumHandler() {
}
public RepaidTypeEnumHandler(Class<E> type) {
this.type = type;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
if (jdbcType == null) {
ps.setString(i, parameter.name());
} else {
// see r3589
ps.setObject(i, parameter.name(), jdbcType.TYPE_CODE);
}
}
@Override
public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
String s = rs.getString(columnName);
if (StringUtils.isNotBlank(s)) {
return Enum.valueOf(type, s);
}
return null;
}
@Override
public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String s = rs.getString(columnIndex);
if (StringUtils.isNotBlank(s)) {
return Enum.valueOf(type, s);
}
return null;
}
@Override
public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String s = cs.getString(columnIndex);
if (StringUtils.isNotBlank(s)) {
return Enum.valueOf(type, s);
}
return null;
}
}