1. 程式人生 > >java中自定義列舉enum對映到mysql資料庫欄位處理器handler

java中自定義列舉enum對映到mysql資料庫欄位處理器handler

今年企業對Java開發的市場需求,你看懂了嗎? >>>   

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;
    }
}