在sys_role表中存在enabled,这个字段有两个可选的值,0为禁用,1为启用。但是在SysRole类中,我们使用Integer enabled,这种情况下必须手动检查enabled的值是否符合要求。在只有两个的值的情况下,处理起来比较容易,但是当出现比较多的值时,对值的校验就变得复杂。因此,在这种情况下,我们一般使用枚举类型。
首先写一个枚举
····
public enum Enabled {
disabled(1),
enabled(0);
private final int value;
Enabled(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
····
在写自定义处理器
····
public class EnabledTypeHandler implements TypeHandler<Enabled> {
private Map<Integer, Enabled> enabledMap = new HashMap<Integer, Enabled>();
public EnabledTypeHandler() {
for (Enabled enabled : Enabled.values()) {
enabledMap.put(enabled.getValue(),enabled);
}
}
@Override
public void setParameter(PreparedStatement preparedStatement, int i, Enabled enabled, JdbcType jdbcType) throws SQLException {
preparedStatement.setInt(i, enabled.getValue());
}
@Override
public Enabled getResult(ResultSet resultSet, String s) throws SQLException {
Integer value = resultSet.getInt(s);
return enabledMap.get(s);
}
@Override
public Enabled getResult(ResultSet resultSet, int i) throws SQLException {
Integer v = resultSet.getInt(i);
return enabledMap.get(v);
}
@Override
public Enabled getResult(CallableStatement callableStatement, int i) throws SQLException {
Integer v = callableStatement.getInt(i);
return enabledMap.get(v);
}
}
····
在mybatis-config.xml中导入
<typeHandlers>
<typeHandler handler="pers.congcong.myBatis2.type.EnabledTypeHandler" javaType="pers.congcong.myBatis2.type.Enabled"/>
</typeHandlers