一、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代码如下:
<"." 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");// 与前端设置的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") "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字段,并写入成输出流。
以上就是本文的全部叙述,希望对大家有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]