国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

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

2020-07-26 14:14:48
字體:
供稿:網(wǎng)友

一、BLOB字段

  BLOB是指二進(jìn)制大對象也就是英文Binary Large Object的所寫,而CLOB是指大字符對象也就是英文Character Large Object的所寫。其中BLOB是用來存儲大量二進(jìn)制數(shù)據(jù)的;CLOB用來存儲大量文本數(shù)據(jù)。BLOB通常用來保存圖片、文件等二進(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、實體代碼如下:

 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 Map<String, Object> uploadAttachment(@RequestParam(value = "testId", required = true) String testId,   HttpServletRequest request)       throws UnsupportedEncodingException {     Map<String, Object> result = new HashMap<String, 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的亂碼問題       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類型字段字段,下載的時候讀取BLOB字段,并寫入成輸出流。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 博白县| 桐柏县| 晋州市| 潮州市| 麦盖提县| 涞水县| 镇原县| 洱源县| 博湖县| 夏河县| 木兰县| 江川县| 镇江市| 保定市| 宁乡县| 八宿县| 将乐县| 虞城县| 出国| 台中市| 华阴市| 贵南县| 沁源县| 西吉县| 仁布县| 东至县| 永兴县| 睢宁县| 绩溪县| 新野县| 鹤壁市| 芒康县| 安顺市| 敦煌市| 伊金霍洛旗| 尖扎县| 鹤庆县| 大连市| 高雄市| 鄂尔多斯市| 望都县|