定义接口,枚举实现接口
public interface BaseEnum{
int getKey();
String getText();
}
枚举类
public enum ChongLogStatus implements BaseEnum {
PAY(1,"已支付"),
CANCEL(2,"已取消"),
NOTPAY(3,"未支付");
public int key;
public String text;
ChongLogStatus(int key, String text) {
this.key = key;
this.text = text;
}
@JsonCreator
public static ChongLogStatus valueOf(int key){
ChongLogStatus[] vals=ChongLogStatus.values();
for (ChongLogStatus v :vals){
if (v.getKey().equals(key)){
return v;
}
}
return null;
}
@JsonValue
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getText() {
return this.text;
}
}
TypeHandler
public class YsEnumTypeHandler <E extends Enum<E> & BaseEnum> extends BaseTypeHandler<E> {
private Class<E> type;
public YsEnumTypeHandler(Class<E> type) {
if (type == null) {
throw new IllegalArgumentException("Type argument cannot be null");
}
if(BaseEnum.class.isAssignableFrom(type)){
this.type=type;
}else {
throw new IllegalArgumentException("Type 没有继承BaseEnum,或不支持的类型。");
}
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.getKey());
}
@Override
public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
int i = rs.getInt(columnName);
return rs.wasNull()?null:this.valueOf(i);
}
@Override
public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
int i = rs.getInt(columnIndex);
return rs.wasNull()?null:this.valueOf(i);
}
@Override
public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
int i = cs.getInt(columnIndex);
return cs.wasNull()?null:this.valueOf(i);
}
protected E valueOf(Integer key){
E[] values = this.type.getEnumConstants();
for (E e :values){
if(key.equals(e.getKey())){
return e;
}
}
return null;
}
}