佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 深入淺析mybatis oracle BLOB類型字段保存與讀取

深入淺析mybatis oracle BLOB類型字段保存與讀取

熱門標(biāo)簽:AI電銷 Linux服務(wù)器 地方門戶網(wǎng)站 網(wǎng)站排名優(yōu)化 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) 服務(wù)外包 呼叫中心市場(chǎng)需求

一、BLOB字段

  BLOB是指二進(jìn)制大對(duì)象也就是英文Binary Large Object的所寫,而CLOB是指大字符對(duì)象也就是英文Character Large Object的所寫。其中BLOB是用來(lái)存儲(chǔ)大量二進(jìn)制數(shù)據(jù)的;CLOB用來(lái)存儲(chǔ)大量文本數(shù)據(jù)。BLOB通常用來(lái)保存圖片、文件等二進(jìn)制類型的數(shù)據(jù)。

二、使用mybatis操作blob

  1、表結(jié)構(gòu)如下:

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、實(shí)體代碼如下:

 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");// 與前端設(shè)置的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的亂碼問(wèn)題
       String fileName = new String(bytes, "ISO--");
       // 設(shè)置輸出的格式
       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類型字段字段,下載的時(shí)候讀取BLOB字段,并寫入成輸出流。

以上就是本文的全部敘述,希望對(duì)大家有所幫助。

您可能感興趣的文章:
  • SpringBoot Mybatis Plus公共字段自動(dòng)填充功能
  • Mybatis動(dòng)態(tài)調(diào)用表名和字段名的解決方法
  • MyBatis學(xué)習(xí)教程(四)-如何快速解決字段名與實(shí)體類屬性名不相同的沖突問(wèn)題
  • MyBatis獲取插入記錄的自增長(zhǎng)字段值(ID)
  • MyBatis入門之增刪改查+數(shù)據(jù)庫(kù)字段和實(shí)體字段不一致問(wèn)題處理方法
  • mybatis自動(dòng)填充時(shí)間字段示例代碼

標(biāo)簽:銅川 衡水 湖南 湘潭 蘭州 黃山 仙桃 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入淺析mybatis oracle BLOB類型字段保存與讀取》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    太谷县| 吉林市| 榆树市| 苏州市| 沈丘县| 青川县| 同江市| 米林县| 眉山市| 精河县| 堆龙德庆县| 满城县| 万州区| 舞钢市| 文化| 包头市| 永德县| 营山县| 大足县| 泾阳县| 镇平县| 荆州市| 珲春市| 扎兰屯市| 彩票| 彭泽县| 阿拉善右旗| 饶阳县| 苍山县| 石河子市| 十堰市| 蓝田县| 安福县| 汾阳市| 凭祥市| 南丰县| 太白县| 泰来县| 高雄市| 南平市| 汪清县|