mybatis自定义typeHandler

2020年05月14日 41点热度 0人点赞 0条评论

现有的数据库中有个字段为char类型,'Y'表示true,'N'表示false。实体类使用的为Boolean,所以需要转换,就用了typeHandler。

typeHandler用于转换java类型和jdbcType

继承BaseTypeHandler,< >中的为java中的类型

需要重写四个方法,一个用于java类型转换成jdbcType,还有三个用于从jdbcType转换成java类型

/**
 * @author likole
 * @date 20-5-12 上午11:40
 */
public class DefunctTypeHandler extends BaseTypeHandler<Boolean> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i,aBoolean?"Y":"N");
    }

    private Boolean convertToBoolean(String s) {
        return "Y".equals(s);
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return convertToBoolean(resultSet.getString(s));
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return convertToBoolean(resultSet.getString(i));
    }

    @Override
    public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return convertToBoolean(callableStatement.getString(i));
    }
}

然后,在需要转换类型的地方添加ColumnType注解

    @ColumnType(jdbcType = JdbcType.CHAR, typeHandler = DefunctTypeHandler.class)
    private Boolean defunct;

likole

人能常清静,天地悉皆归

文章评论