ORACL数据库通过mybatis查询BLOB或CLOB类型数据

  1. 查询BLOB类型数据

    1. 定义一个字节数组接收

      比如说可以定义一个接收的实体类

      @Data
      public class KnowInfoDto {
          /**
           * Id
           */
          private String id;
          
          /**
           * 内容
           */
          private String  legalContent;
      
          /**
           * 内容byte
           */
          private byte[]  legalContentByte;
      }
      
      
      1. 再到xml里写一个resultMap

       <resultMap id="queryBaseResultMap" type="dto.KnowInfoDto" >
          <id column="id" property="id" jdbcType="VARCHAR" />
          <result column="legalContentByte" property="legalContentByte" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>
        </resultMap>
      

      需要注意的就是这个typeHandler ,要是BlobTypeHandler类型的。之后用这个byte[]z字段去接收。

      1. 在转化为String类型

      接收到之后需要转换成String,可能会乱码。所以我们需要判断编码类型,默认为utf-8.

      /**
           * 获取文件编码类型
           *
           * @param bytes 文件bytes数组
           * @return      编码类型
           */
          public static String getEncoding(byte[] bytes) {
              String defaultEncoding = "UTF-8";
              UniversalDetector detector = new UniversalDetector(null);
              detector.handleData(bytes, 0, bytes.length);
              detector.dataEnd();
              String encoding = detector.getDetectedCharset();
              detector.reset();
              if (encoding == null) {
                  encoding = defaultEncoding;
              }
              return encoding;
          }
      

      再用new String()z转成String。

      try {
                      KnowInfoDto.setLegalContent(new String(KnowInfoDto.getLegalContentByte(),getEncoding(KnowInfoDto.getLegalContentByte())));
                  } catch (UnsupportedEncodingException e) {
                      e.printStackTrace();
                  }
      
  2. 查询CLOB类型数据

    1. 实体类中用String接收就可以了

      @Data
      public class KnowInfoDto {
          /**
           * Id
           */
          private String id;
          
          /**
           * 内容
           */
          private String  legalContent;
      }
      
    2. xml 里要设置一下typeHandler

      <resultMap id="queryBaseResultMap" type="dto.KnowInfoDto" >
          <id column="id" property="id" jdbcType="VARCHAR" />
          <result column="legalContent" property="legalContent" jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler"/>
        </resultMap>
      
posted @ 2020-11-05 11:08  飞刀寻欢  阅读(3265)  评论(0编辑  收藏  举报
……