我在一个项目中使用 MyBatis,我有一个从 MySQL 数据库中的 LONGBLOB 字段获取数据的查询。我希望得到一个字节数组(byte[]
)的结果,所以我试试这个:
<select id="fetchData" resultType="_byte[]" parameterType="_long">
select blobData from Table where id = #{id}
</select>
但是,这不起作用。我收到以下错误:
java.lang.ClassCastException: [B cannot be cast to [Ljava.lang.Object;
at org.apache.ibatis.binding.MapperMethod.convertToArray(MapperMethod.java:146)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:129)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:90)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
有些东西告诉我我应该指定一个类型处理程序(BlobTypeHandler
?),还是什么?但是在哪里以及如何?
我应该提到,通过为字节数组创建包装类并使用结果映射来解决这个问题没有问题:
<resultMap type="BlobData" id="BlobDataMap">
<constructor>
<idArg javaType="_long" column="id" />
<arg javaType="_byte[]" column="blobData" />
</constructor>
</resultMap>
我仍然想知道是否有一种更优雅的方式不涉及创建包装类。