MyBatis使用枚举或其他对象

在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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容