快速通道
思考?
相信对MyBatis和MySQL都不怎么陌生,那么:
- 什么是MyBatis?
- 什么是MySQL?
- MySQL的BLOB字段是什么?
- 怎么存储BLOB类型数据?
- 怎么获取BLOB类型数据?
下面我将用众多方法中的一种来逐步实现。
什么是MyBatis?
MyBatis 本来是 apache 的一个开源项目 iBatis , 2013年11月迁移到 Github 进行托管。MyBatis 是一款半自动的 ORM 持久层框架,具有较高的 SQL 灵活性,它支持定制化 SQL、存储过程以及高级映射、动态 SQL ,延迟加载和缓存等。几乎避免了所有的 JDBC 配置和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,它的数据库无关性较低,将接口和 Java 普通的实体类对象映射成数据库中的记录。
什么是MySQL?
MySQL是一个关系型数据库管理系统,目前是较为流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是较好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MySQL的BLOB字段是什么?
常用BLOB类型存储二进制类型的数据,例如:特征值、图片、文档等。
类型 | 存储数据范围 |
---|---|
TINYBLOB | 0 ~ 255B |
BLOB | 0 ~ 65KB |
MEDIUMBLOB | 0 ~ 16MB |
LONGBLOB | 0 ~ 4GB |
在实际使用中选择适合的字段类型进行字段存储,避免造成空间浪费,还能缩短操作的时间。
怎么存储BLOB类型数据?
需要的jar(pom.xml)
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
<!--数据库连接-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--MyBatis与Spring整合的中间JAR-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
相关配置(resources)
- 配置数据库链接属性
- mapper映射文件
- 生成 sqlSessionFactory 工厂
- 生成 dao 接口的动态代理
实体类(POJO)
import java.util.Arrays;
public class Feature {
private String b_id;
private byte[] feature;
public Feature() {
}
public Feature(String b_id, byte[] feature) {
this.b_id = b_id;
this.feature = feature;
}
public String getB_id() {
return b_id;
}
public void setB_id(String b_id) {
this.b_id = b_id;
}
public byte[] getFeature() {
return feature;
}
public void setFeature(byte[] feature) {
this.feature = feature;
}
@Override
public String toString() {
return "Feature{" +
"b_id='" + b_id + '\'' +
", feature=" + Arrays.toString(feature) +
'}';
}
}
数据库(DB)
视图(Controller)
@RequestMapping("/feature") // 接口
@ResponseBody //返回类型
public Feature feature(){
Feature feature = new Feature(); // 实体类
feature.setB_id("111");
byte[] b = null;
try {
// 这个是照片的特征值,处理过后为 byte[] 类型,可根据实际情况
b = FaceEngines.faceFeature("d:\\1.jpg");
} catch (Exception e) {
e.printStackTrace();
}
feature.setFeature(b);
// 存储数据
adminService.setQrcode(feature); // 调用 service 层进行业务处理
return adminService.getQrcode(feature); // 获取数据,显示结果
}
业务处理(service)
根据需求进行处理
存储(xml)
<insert id="setQrcode" parameterType="com.pojo.Feature">
INSERT INTO feature(b_id,feature) VALUES(#{b_id}, #{feature})
</insert>
怎么获取BLOB类型数据?
读取(xml)
<select id="getQrcode" parameterType="com.pojo.Feature" resultType="com.pojo.Feature">
select *
from feature where b_id=#{b_id}
</select>
结尾。。。
在这个项目中的需求是存储一张照片的特征值,也就是 byte[],其大小大于 255B 但是小于 65KB ,所以我选择 BLOB 类型进行数据的存储。
对于存储 blob 内容可以有多种方法进行处理,我是通过 byte[] 类型进行存储,通过 MyBatis + MySQL 实现对数据库 blob 字段的存取操作。