spring - 使用 myBatis 从数据库中以 byte[] 的形式获取 blob

标签 spring mybatis

我在一个项目中使用 spring MyBatis 1.2.0,其中有一个查询从 Oracle 11g 数据库中的 BLOB 字段获取数据。我想以字节数组(byte[])的形式检索字段,我的代码是:

<select id="getResponse" resultType="_byte[]" parameterType="string">
   select blob_Data from Table where id = #{value,jdbcType=VARCHAR} AND ROWNUM = 1    
</select>

这给出了以下错误:

java.lang.ClassCastException: [B incompatible with [Ljava.lang.Object;
    at org.apache.ibatis.binding.MapperMethod.convertToArray(MapperMethod.java:136)
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43)

除此之外,我还尝试过使用 resultMap:

<resultMap id="responseMap" type="ResponseMessageModel">
    <result property="blobData" column="blob_Data"/>
</resultMap>

<select id="getResponse" resultMap="responseMap" parameterType="string">
   select blob_Data from table where id = #{value,jdbcType=VARCHAR} AND ROWNUM = 1    
</select>

并指定 javaType:

<resultMap id="responseMap" type="ResponseMessageModel">
      <result property="blobData" javaType="_byte[]" column="blob_Data"/>
</resultMap>

<select id="getResponse" resultMap="responseMap" parameterType="string">
   select blob_Data from table where id = #{value,jdbcType=VARCHAR} AND ROWNUM = 1    
</select>

但不幸的是,所有人都给出了相同的 ClassCastException

有人可以告诉我我做错了什么吗?

最佳答案

尝试在结果映射中指定 JDBC 类型:

<result property="blobData" column="blob_Data" jdbcType="BLOB"/>

这是 Camunda BPM 的示例:

Mapping with result map "resourceResultMap", that contains a bytes property

Entity with bytes (byte[]) field

编辑:

如果不起作用,请查看以下question 。它建议使用 BINARY 作为 JDBC 类型或使用自定义类型处理程序,如已接受的答案中所示。

关于spring - 使用 myBatis 从数据库中以 byte[] 的形式获取 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670078/

相关文章:

sts 中的 spring servlet-context

java - 使用 Spring 3.1 的 Java 配置来配置 spring-data-mongodb 存储库

java - 打印 Java 中的值

java - MyBatis,如何获取插入的自动生成 key ? [MySql]

java - IntelliJ 运行/调试配置 - 启动序列之前 : Starting with Tomcat Server doesn't progress

java - 实现Spring Service根据配置向不同的Kafka主题发送消息

java - Mybatis 可以支持将动态列映射到 bean 的映射字段吗?

java - 如何在 MyBatis 动态 SQL 的带注释映射器中使用 XML ResultMap?

java - 在 Hibernate 中使用 load 而不是 get 时遇到 LazyInitializationException

java - MyBatis+OSGi : how to remove mappers dynamically