IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mybatis-plus:向MySQL数据库写入二进制大数据 -> 正文阅读

[大数据]mybatis-plus:向MySQL数据库写入二进制大数据

该基本测试案列使用的是:springboot、mybatis-plus

主要测试的是向数据中写入如.pdf、.yml、.jpg、.mp3等等类型的二进制文件,当然,像字符串这种编码固定的也是可以写入的,不是说数据库中Blob类型的字段不能写入字符串。

MySQL table: tb_blob

在这里插入图片描述

javaBean:TbBlob.class

package xyz.jxust.mp_quickstart.bean;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@TableName(value = "tb_blob")
@Data
public class TbBlob {
    @TableId(value = "id")
    private Integer id;
    @TableField(value = "name")
    private String name;
    @TableField("bin_data")
    private byte[] binData;//数据库的字段为blob、mediumblob、longblob,pojo的属性应为byte数组 byte[]
}

Mapper接口:TbBlobMapper.class

package xyz.jxust.mp_quickstart.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import xyz.jxust.mp_quickstart.bean.TbBlob;
@Mapper
public interface TbBlobMapper extends BaseMapper<TbBlob> {
}

TbBlobMapper测试方法

1.测试方法testInsertTbBlob 向MySQL数据库插入一行记录,主要是通过文件输入流将源文件的二进制数据写入
到数据库中存储。

2.测试方法testSelectTbBlobById 从数据库通过 id 字段查询一条记录,并将记录的二进制数据通过文件输出流写到项目的src目录下。

关于java的输入输出流:
程序能够从中读取(read)数据的地方定义为输入流;程序能够往其中写入(write)数据的地方定义为输出流。

/*==================================TbBlobMapper tests begin======================================================*/
    @Autowired
    TbBlobMapper tbBlobMapper;

    @Test
    public void testInsertTbBlob() throws IOException {
        File file = new File("G:\\我的简历\\pdf\\耿忠相--Java研发岗.pdf");
        FileInputStream fis = new FileInputStream(file);
        System.out.println("bytes of file: "+fis.available());
        byte[] data=new byte[fis.available()];
        fis.read(data,0,fis.available());
        fis.close();

        TbBlob tbBlob = new TbBlob();
        tbBlob.setId(8);
        tbBlob.setName(file.getName());
        tbBlob.setBinData(data);

        int insert = tbBlobMapper.insert(tbBlob);
        System.out.println(insert);
    }

    @Test
    public void testSelectTbBlobById() throws SQLException, IOException {
        TbBlob tbBlob = tbBlobMapper.selectById(8);
        if (tbBlob!=null){
            System.out.println("number of bytes: "+tbBlob.getBinData().length);
            FileOutputStream fos = new FileOutputStream("src/"+tbBlob.getName());
            fos.write(tbBlob.getBinData(),0,tbBlob.getBinData().length);
            fos.close();
        }
    }

    /*==================================TbBlobMapper tests end========================================================*/

注:
我修改测试方法试了几次插入,遇到一些问题
主要是一开始表的bin_data字段被定义为Blob类型的,Blob类型的最大只能存放65535 bytes 的数据,如果要存放再大一些的文件到数据库中,比如小于等于16 M 的,可以将字段声明为MediumBlob类型的,更大的就是LongBlob了,最大能存放4 G的数据。

几次测试后tb_blob表的情况

在这里插入图片描述

尤其注意:

1.可能会遇到packet too large 的异常,只需要修改 MySQL配置文件 my.ini,如果有 max_allowed_packet配置项,修改其值即可,单位可以用M,比如max_allowed_packet=30M;如果没有此配置项,直接在配置文件末尾添加此配置项即可。

2.重要的事说三遍!!!
数据库的字段为blob、mediumblob、longblob,pojo的属性应为byte数组 byte[]!!!
数据库的字段为blob、mediumblob、longblob,pojo的属性应为byte数组 byte[]!!!
数据库的字段为blob、mediumblob、longblob,pojo的属性应为byte数组 byte[]!!!

这个测试只是能够运行不报错,完成基本的任务,还有很多需要改进的地方,希望精通 mybatis-plus 的 ‘C友’ 提出改进的宝贵意见。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:34:18  更:2022-03-08 22:36:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:18:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码