Mybatis针对枚举值的处理
介绍
1. 用户管理中存储男女对应的key值100、101
2. 定义枚举类GenderEnum 继承 DbEnum接口
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface DbEnum extends Serializable {
public Integer getKey();
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/e525b8ac481b46d6a39b27a2b9ef45cf.png)
@AllArgsConstructor
public enum GenderEnum implements DbEnum{
MAIL(100, "男"),
FEMAIL(101, "女"),
UNKNOWN(102, "未知");
;
private Integer key;
@JsonValue
private String value;
public String getValue() {
return value;
}
@Override
public Integer getKey() {
return key;
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/97100536bda84c3cad5f2e68cb3bff19.png)
3.定义枚举类的处理器
public class EnumTypeHandler extends BaseTypeHandler<DbEnum> {
private Class<DbEnum> enumClass;
public EnumTypeHandler(Class<DbEnum> enumClass) {
this.enumClass = enumClass;
}
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, DbEnum dbEnum, JdbcType jdbcType) throws SQLException {
preparedStatement.setInt(i, dbEnum.getKey());
}
@Override
public DbEnum getNullableResult(ResultSet resultSet, String s) throws SQLException {
int anInt = resultSet.getInt(s);
return getEnum(anInt);
}
@Override
public DbEnum getNullableResult(ResultSet resultSet, int i) throws SQLException {
return getEnum(resultSet.getInt(i));
}
@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)查询
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1uUroKB-1668767763154)(img_2.png)]](https://img-blog.csdnimg.cn/6c59698f28ad44cb83c8826fdf1a92be.png)
2)插入
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXplX65p-1668767763154)(img_3.png)]](https://img-blog.csdnimg.cn/09cdd2db254949e993264fdc382dc64a.png)
5.结果
1)插入
![在这里插入图片描述](https://img-blog.csdnimg.cn/e4aef0580f254f1a929c51654d19db2e.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/235d951d04494d9080a6c95ec9719bf2.png)
2) 查询
![在这里插入图片描述](https://img-blog.csdnimg.cn/b21243b9655f4893bcd50326323ef8ae.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPXqmoOE-1668767942126)(img_5.png)]](https://img-blog.csdnimg.cn/5dcd9cbe042a49a7a855335ac2e5f888.png)