如何使用MyBatis处理blob?
java.sql.Blob
没有默认处理程序。 文档建议使用byte[]
数组,但我有一个使用Blob
的遗留类。
如何为Blob定义自定义处理程序?
您可以覆盖BaseTypeHandler
以支持Blob
处理,如下所示:
@MappedTypes(Blob.class) public class CustomBlobTypeHandler extends BaseTypeHandler { @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); } }
然后使用typeHandlersPackage
属性将其注册到SqlSessionFactoryBean
: