介紹
1. 使用者管理中存儲男女對應的key值100、101
2. 定義枚舉類GenderEnum 繼承 DbEnum接口
//DbEnum:
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface DbEnum extends Serializable {
public Integer getKey();
}
// GenderEnum枚舉類
@AllArgsConstructor
public enum GenderEnum implements DbEnum{
MAIL(100, "男"),
FEMAIL(101, "女"),
UNKNOWN(102, "未知");
;
private Integer key;
private String value;
public String getValue() {
return value;
}
@Override
public Integer getKey() {
return key;
}
}
3.定義枚舉類的處理器
public class EnumTypeHandler extends BaseTypeHandler<DbEnum> {
private Class<DbEnum> enumClass;
public EnumTypeHandler(Class<DbEnum> enumClass) {
this.enumClass = enumClass;
}
/**
* 設定存入資料庫的值
* @param preparedStatement
* @param i
* @param dbEnum
* @param jdbcType
* @throws SQLException
*/
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, DbEnum dbEnum, JdbcType jdbcType) throws SQLException {
preparedStatement.setInt(i, dbEnum.getKey());
}
/**
* 從資料庫傳回的處理
* @param resultSet
* @param s
* @return
* @throws SQLException
*/
@Override
public DbEnum getNullableResult(ResultSet resultSet, String s) throws SQLException {
int anInt = resultSet.getInt(s);
return getEnum(anInt);
}
/**
* 用來查詢操作,直接利用結果集傳回,columnName為列名
* @param resultSet
* @param i
* @return
* @throws SQLException
*/
@Override
public DbEnum getNullableResult(ResultSet resultSet, int i) throws SQLException {
return getEnum(resultSet.getInt(i));
}
/**
* 用來存儲過程的查詢操作,直接利用結果集傳回,columnIndex是列索引
* @param callableStatement
* @param i
* @return
* @throws SQLException
*/
@Override
public DbEnum getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
return getEnum(callableStatement.getInt(i));
}
private DbEnum getEnum(Integer key) {
DbEnum[] enumConstants = enumClass.getEnumConstants();
if (Objects.nonNull(enumConstants)) {
for (DbEnum enumConstant : enumConstants) {
if (Objects.equals(enumConstant.getKey(), key)) {
return enumConstant;
}
}
}
return null;
}
}
4.在xml檔案中枚舉字段定義枚舉處理器
1)查詢
2)插入
5.結果
1)插入
2) 查詢
源碼: Mybatis閽堝鏋氫婦鍊肩殑澶勭悊: Mybatis閽堝鏋氫婦鍊肩殑澶勭悊