• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入浅析mybatis oracle BLOB类型字段保存与读取

    一、BLOB字段

      BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存图片、文件等二进制类型的数据。

    二、使用mybatis操作blob

      1、表结构如下:

    create table BLOB_FIELD
    (
      ID          VARCHAR2(64 BYTE)  not null,
      TAB_NAME       VARCHAR2(64 BYTE)  not null,
      TAB_PKID_VALUE    VARCHAR2(64 BYTE)  not null,
      CLOB_COL_NAME    VARCHAR2(64 BYTE)  not null,
      CLOB_COL_VALUE    CLOB,
      constraint PK_BLOB_FIELD primary key (ID)
    );

      2、实体代码如下:

     package com.test.entity;
     import java.sql.Clob; 
     /**
      * 大字段 
      */
     public class BlobField { 
       private String tabName;// 表名
       private String tabPkidValue;// 主键值
       private String blobColName;// 列名
       private byte[] blobColValue;// 列值 clob类型
       public String getTabName() {
         return tabName;
       }
       public void setTabName(String tabName) {
         this.tabName = tabName;
       }
       public String getTabPkidValue() {
         return tabPkidValue;
       }
       public void setTabPkidValue(String tabPkidValue) {
         this.tabPkidValue = tabPkidValue;
       }
       public String getBlobColName() {
         return blobColName;
       }
       public void setBlobColName(String blobColName) {
         this.blobColName = blobColName;
       }
       public byte[] getBlobColValue() {
         return blobColValue;
       }
       public void setBlobColValue(byte[] blobColValue) {
         this.blobColValue = blobColValue;
       }
     }

      3、mybatis sql代码如下:

     ?xml version="." encoding="UTF-" ?>
     !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd">
     mapper namespace="com.test.dao.BlobFieldDao">
       sql id="blobFieldColumns">
         a.ID AS id,
         a.TAB_NAME AS tabName,
         a.TAB_PKID_VALUE AS tabPkidValue,
         a.BLOB_COL_NAME AS blobColName,
         a.BLOB_COL_VALUE AS blobColValue
       /sql>
       sql id="blobFieldJoins">
       /sql>
       select id="get" resultType="blobField">
         SELECT
         include refid="blobFieldColumns" />
         FROM BLOB_FIELD a
         include refid="blobFieldJoins" />
         WHERE a.ID = #{id}
       /select>
       select id="findList" resultType="blobField">
         SELECT
         include refid="blobFieldColumns" />
         FROM BLOB_FIELD a
         include refid="blobFieldJoins" />
       /select> 
       insert id="insert">
         INSERT INTO BLOB_FIELD(
         ID ,
         TAB_NAME ,
         TAB_PKID_VALUE ,
         BLOB_COL_NAME ,
         BLOB_COL_VALUE
         ) VALUES (
         #{id},
         #{tabName},
         #{tabPkidValue},
         #{blobColName},
         #{blobColValue,jdbcType=BLOB}
         )
       /insert>
       update id="update">
         UPDATE BLOB_FIELD SET
         TAB_NAME = #{tabName},
         TAB_PKID_VALUE = #{tabPkidValue},
         BLOB_COL_NAME = #{blobColName},
         BLOB_COL_VALUE = #{blobColValue}
         WHERE ID = #{id}
       /update>
       delete id="delete">
         DELETE FROM BLOB_FIELD 
         WHERE ID = #{id}
       /delete>
     /mapper>

      3、controller代码如下:

      a、保存BLOB字段代码

    /**
        * 附件上传
        * 
        * @param testId
        *      主表Id
        * @param request
        * @return
        * @throws UnsupportedEncodingException
        */
       @RequiresPermissions("exc:exceptioninfo:feedback")
       @RequestMapping(value = "attachment", method = RequestMethod.POST)
       @ResponseBody
       public MapString, Object> uploadAttachment(@RequestParam(value = "testId", required = true) String testId, 
     
     HttpServletRequest request)
           throws UnsupportedEncodingException {
         MapString, Object> result = new HashMapString, Object>();
     
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         // 获得文件
         MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 与前端设置的fileDataName属性值一致
         String filename = multipartFile.getOriginalFilename();// 文件名称
         InputStream is = null;
         try {
           //读取文件流
           is = multipartFile.getInputStream();
           byte[] bytes = FileCopyUtils.copyToByteArray(is);
           BlobField blobField = new BlobField();
           blobField.setTabName("testL");
           blobField.setTabPkidValue(testId);
           blobField.setBlobColName("attachment");
           blobField.setBlobColValue(bytes);
           //保存blob字段
           this.testService.save(blobField, testId, filename);
           result.put("flag", true);
           result.put("attachmentId", blobField.getId());
           result.put("attachmentName", filename);
         } catch (IOException e) {
           e.printStackTrace();
           result.put("flag", false);
         } finally {
           IOUtils.closeQuietly(is);
         }
         return result;
       }

      b、读取BLOB字段

     /**
        * 下载附件
        * 
        * @param attachmentId
        * @return
        */
       @RequiresPermissions("exc:exceptioninfo:view")
       @RequestMapping(value = "download", method = RequestMethod.GET)
       public void download(@RequestParam(value = "attachmentId", required = true) String attachmentId,
           @RequestParam(value = "attachmentName", required = true) String attachmentName, HttpServletRequest 
     request, HttpServletResponse response) {
         ServletOutputStream out = null;
         try {
           response.reset();
           String userAgent = request.getHeader("User-Agent");
           byte[] bytes = userAgent.contains("MSIE") ? attachmentName.getBytes() : attachmentName.getBytes("UTF-
     "); // fileName.getBytes("UTF-")处理safari的乱码问题
           String fileName = new String(bytes, "ISO--");
           // 设置输出的格式
           response.setContentType("multipart/form-data");
           response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(attachmentName, 
     "UTF-"));
           BlobField blobField = this.blobFieldService.get(attachmentId);
           //获取blob字段
           byte[] contents = blobField.getBlobColValue();
           out = response.getOutputStream();
           //写到输出流
           out.write(contents);
           out.flush();
         } catch (IOException e) {
           e.printStackTrace();
         }
       }        

      本例子将文件上传并保存到BLOB类型字段字段,下载的时候读取BLOB字段,并写入成输出流。

    以上就是本文的全部叙述,希望对大家有所帮助。

    您可能感兴趣的文章:
    • SpringBoot Mybatis Plus公共字段自动填充功能
    • Mybatis动态调用表名和字段名的解决方法
    • MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题
    • MyBatis获取插入记录的自增长字段值(ID)
    • MyBatis入门之增删改查+数据库字段和实体字段不一致问题处理方法
    • mybatis自动填充时间字段示例代码
    上一篇:oracle适配器连接不上的解决办法
    下一篇:oracle数据库优化辅助SQL语句
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入浅析mybatis oracle BLOB类型字段保存与读取 深入,浅析,mybatis,oracle,BLOB,