java.sql.Blob
没有默认处理程序。文档建议使用byte[]
数组,但我有一个使用Blob
的遗留类。
如何为Blob定义自定义处理程序?
答案 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>