文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis对MySQL中BLOB字段的读取

2023-09-21 21:02

关注

文章目录

一、使用TEXT还是BLOB?

1、TEXT和BLOB主要差别

主要差别就是BLOB保存二进制数据,TEXT保存字符数据
目前几乎博客内容里图片都不是二进制存储在数据库的,而是把图片上传到服务器,然后正文里使用标签引用,这样的博客就可以使用TEXT类型,而BLOB就可以把图片换算成二进制保存到数据库中。

2、类型区别

TEXT类型是一种特殊的字符串类型,包括TINYTEXTTEXTMEDIUMTEXTLONGTEXT,其长度和储存空间不同而已:
在这里插入图片描述
BLOB 是一个二进制的对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOBBLOBMEDIUMBLOBLONGBLOB,它们可容纳值的最大长度不同,如下表所示:
在这里插入图片描述

通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储

3、严格模式

运行在非严格模式时,如果为BLOB 或TEXT列分配一个超过该列类型的最大长度的值时,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并警告。

4、其他:

1)text不设置长度,当不知道属性的最大长度时,适合用text,能用varchar的地方不用text。查询速度varchar比text快。
2)TEXT和BLOB在存储和检索过程中不存在大小写转换,都一样。
3)对于BLOB 和TEXT列的索引,必须指定索引前缀的长度;
4)BLOB 和TEXT列不能有默认值;

二、Mybatis对MySQL中BLOB字段的读取

对text的读取各个实体类不需要特殊处理,均用String处理即可

本文以mybatis-plus 3.1.1+mysql为例,说下Mybatis对MySQL中BLOB字段的读取和写入处理:

1、修改mapper.xml

在mapper.xml中相应字段添加jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"

eg:文章表:、摘要、作者、文章内容(富文本框BLOB类型)  <!-- 通用查询映射结果 -->    <resultMap id="BaseResultMap" type="com.test.common.entity.ArticleInfo">        <id column="seq_id" property="seqId"/>        <result column="title" property="title"/>        <result column="summary" property="summary"/>        <result column="author" property="author"/>        <result column="article" property="article" jdbcType="BLOB"  typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>        </resultMap>

2、修改对应的实体类

修改实体类对应的字段为byte[]类型:

@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)@ApiModel(value="ArticleInfo对象", description="文章表 ")public class ArticleInfo extends Model<ArticleInfo> {private static final long serialVersionUID=1L;    @ApiModelProperty(value = "主键")    @TableId(value = "seq_id", type = IdType.AUTO)    private Long seqId;    @ApiModelProperty(value = "")    @TableField("title")    private String title;    @ApiModelProperty(value = "摘要")    @TableField("summary")    private String summary;        @ApiModelProperty(value = "作者")    @TableField("author")    private String author;        @ApiModelProperty(value = "文章内容")    @TableField("article")    private byte[] article;  }

3、读取

与前端交互的dto或者vo里,可以用String接受和存储:

@Data@EqualsAndHashCode(callSuper = false)@ApiModel(value = "脚本信息")public class ArticleInfoVo implements Serializable {    private static final long serialVersionUID = 1L;    @ApiModelProperty(value = "主键")    private Long seqId;    @ApiModelProperty(value = "  ")    private String title;    @ApiModelProperty(value = " 摘要 ")    private String summary;    @ApiModelProperty(value = " 作者 ")    private String author;    @ApiModelProperty(value = " 文章内容 ")    private String article; }
//保存接口: @Override    public void saveInfo(ArticleInfoVo infoVo) {        ArticleInfo info = new ArticleInfo();         BeanUtils.copyProperties(infoVo, info);        try {        //将String转为byte[]            if (StringUtils.isNotBlank(infoVo.getTitle())) {info.setArticle(infoVo.getArticle().getBytes());            }        } catch (Exception e) {            log.error("处理文章内容异常", e);        }         baseMapper.save(info);  }//根据唯一查看详情接口: @Override    public ArticleInfoVo queryInfo(String title) {    QueryWrapper<ArticleInfo> queryWrapper = new QueryWrapper<>();        queryWrapper.lambda().eq(ArticleInfo::getTitle, title);        ArticleInfo info = articleInfoMapper.selectOne(queryWrapper);        String article = "";        try {        //将byte[]转为String            if (info.getArticle() != null && info.getArticle().length > 0) {                article = new String(info.getArticle(), "UTF-8");            }        } catch (Exception e) {            log.error("处理文章内容异常", e);        }         BeanUtils.copyProperties(info, infoVo);         infoVo.setArticle(article); return  infoVo; }

4、效果

在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_47061482/article/details/128382172

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯