如何使用MyBatis处理blob?

时间:2014-12-17 09:46:40

标签: java mybatis

java.sql.Blob没有默认处理程序。文档建议使用byte[]数组,但我有一个使用Blob的遗留类。

如何为Blob定义自定义处理程序?

1 个答案:

答案 0 :(得分:1)

您可以覆盖BaseTypeHandler以支持Blob处理,如下所示:

@MappedTypes(Blob.class)
public class CustomBlobTypeHandler extends BaseTypeHandler<Blob> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i,
            Blob parameter, JdbcType jdbcType) throws SQLException {
        InputStream is = parameter.getBinaryStream();
        try {
            ps.setBinaryStream(i, is, is.available());
        } catch (IOException e) {
            throw new SQLException(e);
        }
    }

    @Override
    public Blob getNullableResult(ResultSet rs, String columnName)
            throws SQLException {
        return rs.getBlob(columnName);
    }

    @Override
    public Blob getNullableResult(ResultSet rs, int columnIndex)
            throws SQLException {
        return rs.getBlob(columnIndex);
    }

    @Override
    public Blob getNullableResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        return cs.getBlob(columnIndex);
    }

}

然后使用SqlSessionFactoryBean属性注册typeHandlersPackage

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="in.ksharma.model" />
        <property name="typeHandlersPackage" value="in.ksharma.mybatis.typehandlers" />
        <property name="mapperLocations" value="classpath*:*-mapper*.xml" />
    </bean>