How to handle blob with MyBatis?

There is no default handler for java.sql.Blob . The documentation recommends using the byte[] array, but I have an inherited class that uses Blob .

How to define a custom handler for blob?

0
source share
1 answer

You can override BaseTypeHandler to support Blob processing as follows:

 @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); } } 

Then register it using SqlSessionFactoryBean using the SqlSessionFactoryBean property:

 <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> 
+1
source

All Articles