枚举typeHandler
在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是:
•EnumOrdinalTypeHandler。
•EnumTypeHandler。
因为它们的作用不大,所以在大部分情况下,我们都不用它们,不过我们还是要稍微了解一下它们的用法。
EnumOrdinalTypeHandler
EnumOrdinalTypeHandler是按MyBatis根据枚举数组下标索引的方式进行匹配的,也是枚举类型的默认转换类,它要求数据库返回一个整数作为其下标,它会根据下标找到对应的枚举类型
EnumTypeHandler
EnumTypeHandler会把使用的名称转化为对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行Enum.val-ueOf(SexEnum.class,"MALE");转换
自定义枚举typeHandler
代码清单4-23:SexEnumTypeHandler
package com.xc.util.typehandler; import com.xc.enumerate.SexEnum; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import org.apache.ibatis.type.TypeHandler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @MappedTypes(SexEnum.class) @MappedJdbcTypes(JdbcType.INTEGER) public class SexEnumTypeHandler implements TypeHandler<SexEnum> { @Override public void setParameter(PreparedStatement ps, int i, SexEnum parameter, JdbcType jdbcType) throws SQLException { ps.setInt(i, parameter.getId()); } @Override public SexEnum getResult(ResultSet rs, String columnName) throws SQLException { int id = rs.getInt(columnName); return SexEnum.getSexById(id); } @Override public SexEnum getResult(ResultSet rs, int columnIndex) throws SQLException { int id = rs.getInt(columnIndex); return SexEnum.getSexById(id); } @Override public SexEnum getResult(CallableStatement cs, int columnIndex) throws SQLException { int id = cs.getInt(columnIndex); return SexEnum.getSexById(id); } }
package com.xc.enumerate; public enum SexEnum { MALE(1, "男"), FEMALE(0, "女"); private int id; private String name; SexEnum(int id, String name) { this.id = id; this.name = name; } public static SexEnum getSexById(int id) { for (SexEnum sex : SexEnum.values()) { if (sex.getId() == id) { return sex; } } return null; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }