类都在包 default下创建
1、先定义一个接口类
public interface BaseEnum { public String getValue(); public String getName(); }
2、让一个枚举类型实现这个接口
public enum EnumTest implements BaseEnum { TEST_ONE("test1", "测试一"), TEST_TWO("test2", "测试二"); private EnumTest(String value, String name) { this.name = name; this.value = value; } private String name; private String value; @Override public String getName() { return this.name; } @Override public String getValue() { return this.value; } public static EnumTest enumValueOf(String value) { EnumTest[] values = EnumTest .values(); for (EnumTest test : values) { if (value.equalsIgnoreCase(test.getValue())) { return test; } } return null; } }
3、创建mybatis枚举类型处理类
public class BaseEnumTypeHandler<E extends BaseEnum> extends BaseTypeHandler<E> { private final Class<E> type; public BaseEnumTypeHandler(Class<E> type) { if (type == null) { throw new IllegalArgumentException("Type argument cannot be null"); } this.type = type; } @Override public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.getValue()); } @Override public E getNullableResult(ResultSet rs, String columnName) throws SQLException { String s = rs.getString(columnName); BaseEnum[] baseEnumArr = this.type.getEnumConstants(); E baseEnum = valueOfString(baseEnumArr, s); return baseEnum; } @Override public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String s = rs.getString(columnIndex); BaseEnum[] baseEnumArr = this.type.getEnumConstants(); E baseEnum = valueOfString(baseEnumArr, s); return baseEnum; } @Override public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String s = cs.getString(columnIndex); BaseEnum[] baseEnumArr = this.type.getEnumConstants(); E baseEnum = valueOfString(baseEnumArr, s); return baseEnum; } @SuppressWarnings("unchecked") private E valueOfString(BaseEnum[] baseEnumArr, String value) { if (baseEnumArr == null || StringUtils.isBlank(value)) { return null; } for (BaseEnum baseEnum : baseEnumArr) { if (value.equalsIgnoreCase(baseEnum.getValue())) { return (E) baseEnum; } } return null; } }
4、在mybatis配制文件mybatis.cfg.xml里添加一个配制
<typeHandlers> <typeHandler handler="BaseEnumTypeHandler" javaType="EnumTest"/> </typeHandlers>