添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
mybatis中,当需要将复杂类型,如数组、List等数据保存至数据库时,是无法直接存取的。必须定义自己的类型转换器。即继承BaseTypeHandler类。
在下面的实例中,实现了java中的Integer数组和数据库中BLOB类型字段互相转换的功能。
首先看使用方法:
insert into  user (name, families) values (#{user}, #{familied, jdbcType=BLOB, typeHandler=com.exmple.handler.IntegerArrayHandler})
Handler类的定义
package com.example;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import javax.sql.rowset.serial.SerialBlob;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
 * Integer数组TypeHandler
 * 在数据库和java之间将Integer[]与BLOB类型字段互相转换
 * @author amdin
 * @since WebComment1.0
public class IntegerArrayTypeHandler extends BaseTypeHandler<Integer[]> {
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, Integer[] parameter, JdbcType jdbcType) throws SQLException {
    String str = "";
    for (Integer s : parameter){
      str = str + "***" + s;
    Blob blob = new SerialBlob(str.getBytes());
    ps.setBlob(i, blob);
  @Override
  public Integer[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
    Blob blob = rs.getBlob(columnName);
    String str = new String(blob.getBytes(1, (int)blob.length()));
    String[] strArray = str.split("\\*\\*\\*");
    List<Integer> list = new ArrayList<>();
    for (String s : strArray){
      if (!s.equals("") && !s.equals(null)) {
        list.add(Integer.parseInt(s));
    Integer[] resultArray = new Integer[list.size()];
    return list.toArray(resultArray);
  @Override
  public Integer[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    return new Integer[0];
  @Override
  public Integer[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    return new Integer[0];
总结:从上面的代码看,使用了***作为分隔符,以此来区分数组的不同项。这当然不是一种好方法,不过确实能解决问题。
更好的方法当然也有,下一节将会介绍任意类型数组与BLOB类型数据的互相映射。
mybatis中,当需要将复杂类型,如数组、List等数据保存至数据库时,是无法直接存取的。必须定义自己的类型转换器。即继承BaseTypeHandler类。在下面的实例中,实现了java中的Integer数组和数据库中BLOB类型字段互相转换的功能。首先看使用方法:insert into user (name, families) values (#{user}, #{fami... <resultMap type="返回实体类" id="result" > <result property="实体类字段名" column="mysql字段名" typeHandler="处理数据的文件"/> </resultMap> <select id="Mapper.java的方法名" parameterType="传参类型" r
testpublic void test() {}欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 加粗 Ctrl + B
java.lang.IllegalArgumentException: argument type mismatch 产生问题的问题: 在使用byte[]形式将数据库中的图片(blob)取出时,mybatis无法正常转化类型 解决方式: 在mapper文件中,将返回类型(resultType)设定为“java.util.Map”,并且在sql语句中,将查找到的列进行重命名,重命名后的列名对应map中的key 在dao类中声明返回值为Map的函数用于接收Map。 在service中通过 byte[
1.实体类对象里面用于存储文件的字段类型必须为Object,因为存入表的时候数据类型时blob类型,读取出来的数据类型时byte[]数组 2.表里面数据类型设置为Blob 或者longblob 3.设置上传文件大小必须小于4M(byte.length < 4* 1024*1024...
MultipartFile 通过 MultipartFile .transferTo( new File()), 仅需要这步骤,就可以把图片存到服务器所在的电脑的任意一个盘或者路径里面。 这里需要注意的一点: new File("d:/stair/second... 环境:maven+SpringMVC + Spring + MyBatis + MySql 本文主要说明如何使用input上传文件到服务器指定目录,或保存到数据库中;如何从数据库下载文件,和显示图像文件并实现缩放。 将文件存储在数据库中,一般是存文件的byte数组,对应的数据数据类型为blob。 首先要创建数据库,此处使用MyS
MyBatis是一个开源的持久层框架,它可以与关系数据库进行交互。在MyBatis中,可以使用BLOB(Binary Large Object)来存储和获取大量的二进制数据。 当我们需要将二进制数据存储到数据库中时,可以使用MyBatisBLOB类型来声明相应的属性。在数据库表中,我们可以使用BLOB、BINARY或VARBINARY类型来存储二进制数据。在MyBatis的映射文件中,我们可以使用BLOB类型来和数据库对应的字段进行映射。 在存储二进制数据之前,我们需要将其转换成字节数组。可以使用InputStream或File对象来获取二进制数据,然后将其转换成字节数组,再使用MyBatisBLOB对象进行存储。 在映射文件的insert语句中,我们可以使用#{blobProperty,jdbcType=BLOB}来指定BLOB类型的属性,并通过#{blobProperty}来引用该属性。当执行插入操作时,MyBatis会将字节数组转换为二进制数据,并存储到数据库中的BLOB字段中。 在查询二进制数据时,可以使用select语句查询到对应的BLOB字段。在映射文件中,我们可以使用#{blobProperty,jdbcType=BLOB}来接收查询结果,并通过#{blobProperty}来引用该属性。当执行查询操作时,MyBatis会将数据库中的BLOB字段转换为字节数组,并赋值给相应的属性。 总而言之,使用MyBatis存取BLOB数据需要将其转换成字节数组进行存储,然后在查询时将字节数组转换为对应的二进制数据。使用BLOB类型来声明属性,可以方便地进行数据库交互,实现对二进制数据的存储和获取。
谢谢分享,使用时有瑕疵。 @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { Blob blob = rs.getBlob(columnName); if(blob!=null&&blob.length()>0){ return new String(blob.getBytes(1, (int)blob.length())); return ""; Java WebSocket爬虫 花田か子: Mybatis 居然可以操作 ClickHouse? DaMing9527: 怎么没删除