mybatis mysql clob_深入浅析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代码如下:

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

SELECT

FROM BLOB_FIELD a

WHERE a.ID = #{id}

SELECT

FROM BLOB_FIELD a

INSERT INTO BLOB_FIELD(

ID ,

TAB_NAME ,

TAB_PKID_VALUE ,

BLOB_COL_NAME ,

BLOB_COL_VALUE

) VALUES (

#{id},

#{tabName},

#{tabPkidValue},

#{blobColName},

#{blobColValue,jdbcType=BLOB}

)

UPDATE BLOB_FIELD SET

TAB_NAME = #{tabName},

TAB_PKID_VALUE = #{tabPkidValue},

BLOB_COL_NAME = #{blobColName},

BLOB_COL_VALUE = #{blobColValue}

WHERE ID = #{id}

DELETE FROM BLOB_FIELD

WHERE ID = #{id}

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 uploadAttachment(@RequestParam(value = "testId", required = true) String testId,

HttpServletRequest request)

throws UnsupportedEncodingException {

Map result = new HashMap();

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字段,并写入成输出流。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值