Loading

mybatis枚举使用

定义接口,枚举实现接口
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;
  }
}

posted @ 2020-12-03 10:31  八百斤青龙偃月刀  阅读(73)  评论(0)    收藏  举报