Mybatis对MySQL中BLOB字段的读取

news2025/2/3 19:03:54

一、使用TEXT还是BLOB?

1、TEXT和BLOB主要差别

主要差别就是BLOB保存二进制数据,TEXT保存字符数据
目前几乎博客内容里图片都不是二进制存储在数据库的,而是把图片上传到服务器,然后正文里使用<img>标签引用,这样的博客就可以使用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字段的读取

本文以mybatis-plus 3.1.1+mysql为例

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;
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑系统下载的镜像文件在哪里图解

如果你在小白系统上面下载了镜像文件&#xff0c;但是不知道下载完成怎么找到它的话&#xff0c;下面就和小编一起来看一下小白系统下载的镜像文件知道方法。 工具/原料&#xff1a; 系统版本&#xff1a;windows10系统 品牌型号&#xff1a;惠普战66五代 方法/步骤&#x…

C/C++程序的断点调试 - Microsoft Visual Studio

本文以Microsoft Visual Studio为例&#xff0c;简述C/C程序断点调试的基本方法和过程。其它的IDE环境&#xff0c;大同小异。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff…

【BFS】八数码问题(c++基础算法)

目录 一.读题 二.在做题之前 1.康拓展开 2.DFS和BFS的区别 3.栈和队列的区别 三.做题 1.算法原理 2.算法实现 ①队列 ②康托展开 ③标记 四.AC代码 一.读题 作为最经典的一道宽度优先搜索题&#xff0c;它的题面并不是很难懂。 【宽搜&#xff08;难度&#xff1a;6&a…

爆款短视频拍摄技巧之摇、移、跟拍等,这样拍的视频才更有吸引力,速收藏

爆款短视频拍摄技巧之拍摄手法,这样拍的视频才更有吸引力。 拍摄技巧主要分为两个部分&#xff0c;一个是构图&#xff0c;一个是拍摄手法。上一篇我们聊过了两种构图手法&#xff0c;接下来咱们聊一下拍摄手法&#xff0c;也就是我们常说的推、拉、摇、移、跟这五种手法。 其…

NNDL 2022秋

第一届AI专业&#xff0c;很多课程都是第一次开课&#xff0c;老师和学生都在“摸着石头过河”。 好处是所学内容比较新&#xff0c;跟得上“潮流”&#xff0c;学习意愿比较强。 难处是教学资料相对欠缺&#xff0c;需要学的内容较多&#xff0c;难度较大。 大家经过一学期…

leetcode:1494. 并行课程 II【dfs记忆化 + 状态压缩】

目录题目截图题目分析ac code总结题目截图 题目分析 这道题很像toposort&#xff0c;但实际不是因为那些indeg为先为0的&#xff0c;先选不一定好的考虑到n很小我们使用状态压缩dfs(state)表示当前state下&#xff0c;还需要多少个学期结束用pre数组存一下每个idx对应的前置条…

基于C++11 实现的线程池

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 基于C11 实现的线程池基于C11 实现的线程池1、线程池原理2、线程池的设计思路&#xff1f;3、一个基于C11的优秀的线程池3.1 头文件3.2 线程池类3.3 构造函数实现3.4 入队—添…

ModStartBlog v6.4.0 升级输入过滤、多文件组件,修复已知问题

V6.4.0版本更新 2022年12月20日ModStartBlog发布v6.4.0版本&#xff0c;增加了以下14个特性&#xff1a; [新功能] 富文本过滤规则调整优化[新功能] ArrayPackage数组输入数据包处理器[新功能] 请求输入组件新增多文件路径类型[新功能] 多文件上传组件[新功能] 所有组件新增t…

RCE代码及命令执行(详解)

RCE代码及命令执行1.RCE漏洞1.1.漏洞原理1.2.漏洞产生条件1.3.漏洞挖掘1.4.漏洞分类1.4.1.命令执行1.4.1.1.漏洞原理1.4.1.2.命令执行危险函数1.4.1.3.漏洞检测1.4.2.代码执行1.4.2.1.漏洞原理1.4.2.2.代码执行危险函数1.4.2.3.漏洞检测1.5.命令执行和代码执行区别2.命令执行2.…

QT学习记录(二)最基础的工程

文件 工程新建后会有这几个文件&#xff0c;自动生成的 main.cpp #include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.show();return a.exec(); }QApplication a(argc, argv);这里…

Mentor-dft 学习笔记 day45-MTFI

Using MTFI Files此节介绍MTFI&#xff08;Mentor Tessend Fault Information&#xff09;功能&#xff0c;可用于ATPG工具和Tessent LogicBIST。MTFI是用于存储故障状态信息的通用且可扩展的文件格式。MTFI File Format MTFI是在“dft-edt”和“patterns-scan”上下文中读取和…

运用大O来给代码提速(冒泡排序)

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余&#xff0c;我决定把这本书精彩的部分摘录出来与大家分享。 本章内容 写在前面 1.冒泡排序 2.冒泡排序实战 3.冒泡排序的实现 4.冒泡排序的效率 5.二次问题 6.线性解决 7.总结 写在前面 大 O记…

Diffusion Model合集 part2

扩散模型原理介绍2五&#xff0c;逆扩散过程(Reverse Process)六&#xff0c;扩散过程中的后验的条件概率q(xt−1∣xt,x0)q(x_{t-1}|x_{t},x_{0})q(xt−1​∣xt​,x0​)七&#xff0c;目标数据分布的似然函数八&#xff0c;Diffusion Probabilistic Model的算法代码五&#xff…

“专利费用减缓”怎么申请?

在专利申请时&#xff0c;很多申请人对“专利费用减缓”的概念并不了解&#xff0c;或者不太清楚。甚至有很多申请人一听到专利申请可以请求费用减缓&#xff0c;就以为申请专利是不要钱的。当然&#xff0c;这样的理解就存在了很大的偏差了&#xff0c;所以&#xff0c;我们今…

Java Arrays类

JavaArrays类\huge{Java \space Arrays类}Java Arrays类 概述 Arrays类Arrays类Arrays类&#xff1a;本质就是一个工具类&#xff0c;用于操作数组元素的。 常用API ①. toString()&#xff08;重写过的toString方法&#xff09; toString()toString()toString()&#xff1a…

人才招聘网 招聘系统源码找工作源代码 各行业的招聘网站门户源码

运行环境&#xff1a;VS2015SqlServer2008R2.NET4.0 系统介绍&#xff1a; 适用于各地方或者各行业的招聘网站门户&#xff0c;相当强大的人才招聘网站&#xff0c;可登陆注册、支持第三方登陆&#xff0c;强大额后台管理&#xff0c;功能全面&#xff0c;界面美观 职位和简历…

如何用yolov5 训练自己的数据

文章目录 说明数据准备划分数据集转换数据label 格式训练前准备修改图片路径修改训练配置文件 voc.yaml修改 yolo配置文件开始训练没有GPU 或显存不够的说明 利用yolov5 训练自己的数据集通常需要利用自己标注的数据进行训练 接下来记录下如何训练自己的数据 数据准备 我这用的…

【数据结构】- 面试题

面试题1. 删除链表中的节点2. 反转一个链表&#xff08;非递归解法&#xff09;3. 判断一个链表是否有环&#xff08;快慢指针&#xff09;问题&#xff1a;[快慢指针为什么一定会相遇](https://blog.csdn.net/Leslie5205912/article/details/89386769)4. 获取单链表的节点个数…

【轻量级开源ROS 的机器人设备(5)】--(3)拟议的框架——µROS节点

前文链接&#xff1a;(2条消息) 【轻量级开源ROS 的机器人设备&#xff08;5&#xff09;】--&#xff08;2&#xff09;拟议的框架——ROS节点 五、静态栈分析 在处理运行多个资源的严格受限平台时线程&#xff0c;重要的是将堆栈使用保持在最低限度。这甚至 在利用具有同质堆…

技嘉电脑怎么开启vt模式?

电脑开启vt模式后&#xff0c;可以提高主板的运行速率&#xff0c;提高性能。那就有一些使用技嘉电脑的用户问技嘉主板怎么开启vt模式&#xff1f;下面小编就来教教大家技嘉电脑开启vt模式的方法。 Intel芯片组的技嘉主板 1、一般情况下&#xff0c;也就是在电脑开机的时候&…