mybatis查询mysql blob字段_mybatis处理blob类型字段

本文介绍了如何在MyBatis中处理MySQL中的BLOB类型字段,提供了一个自定义的BlobTypeHandler类,用于将BLOB字段转化为String。该类实现了在插入、更新和查询时对BLOB字段的处理,并处理了可能出现的编码问题。
摘要由CSDN通过智能技术生成

参考:https://blog.csdn.net/kelei2015/article/details/84964866

mysql数据库中blob类型字段

6d8c4d492c9961c167d190e659e1041e.png

在实体类中表示:

private String content; //正文内容

处理方法:

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.ibatis.type.BaseTypeHandler;

import org.apache.ibatis.type.JdbcType;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.sql.*;

/**

* @description:处理数据库中的blob类型字段

* @author: Administrator

* @date: 2019-07-09 15:07

*/

public class BlobTypeHandler extends BaseTypeHandler{

protected static Log logger = LogFactory.getLog(BlobTypeHandler.class);

// 指定字符集

private static final String DEFAULT_CHARSET = "utf-8";

@Override

public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {

logger.info("【BlobTypeHandler】insert或者update时处理blob字段:");

//声明一个输入流对象

ByteArrayInputStream bis=null;

try {

// 把String转化成byte流

//把字符串转为字节流

bis = new ByteArrayInputStream(parameter.getBytes(DEFAULT_CHARSET));

} catch (UnsupportedEncodingException e) {

logger.error("【BlobTypeHandler】insert或者update处理blob字段出错,错误原因为:" + e);

throw new RuntimeException("Blob Encoding Error!");

}finally {

if (bis!= null) {

try {

bis.close();

} catch (IOException e) {

logger.error("【BlobTypeHandler】insert或者update处理blob字段出错,错误原因为:" + e);

throw new RuntimeException("Blob Encoding Error!");

}

}

}

ps.setBinaryStream(i, bis, parameter.length());

}

@Override

public String getNullableResult(ResultSet rs, String columnName)

throws SQLException {

logger.info("【BlobTypeHandler】query查询时处理blob字段");

Blob blob = rs.getBlob(columnName);

byte[] returnValue = null;

String result = null;

if (null != blob) {

//将取出的流对象转为utf-8的字符串对象

returnValue = blob.getBytes(1, (int) blob.length());

}

try {

if (null != returnValue) {

// 把byte转化成string

result = new String(returnValue, DEFAULT_CHARSET);

}

} catch (UnsupportedEncodingException e) {

logger.error("【BlobTypeHandler】查询处理blob字段出错,错误原因为:" + e);

throw new RuntimeException("Blob Encoding Error!");

}

return result;

}

@Override

public String getNullableResult(CallableStatement cs, int columnIndex)

throws SQLException {

logger.info("【BlobTypeHandler】query查询时处理blob字段");

Blob blob = cs.getBlob(columnIndex);

byte[] returnValue = null;

String result = null;

if (null != blob) {

returnValue = blob.getBytes(1, (int) blob.length());

}

try {

if (null != returnValue) {

//将取出的流对象转为utf-8的字符串对象

return new String(returnValue,DEFAULT_CHARSET);

}

} catch (UnsupportedEncodingException e) {

logger.error("【BlobTypeHandler】查询处理blob字段出错,错误原因为:" + e);

throw new RuntimeException("Blob Encoding Error!");

}

return result;

}

@Override

public String getNullableResult(ResultSet rs, int columnName)

throws SQLException {

logger.info("【BlobTypeHandler】query查询时处理blob字段");

String result = null;

Blob blob = rs.getBlob(columnName);

byte[] returnValue = null;

if (null != blob) {

returnValue = blob.getBytes(1, (int) blob.length());

}

try {

// 把byte转化成string

if (null != returnValue) {

// result = new String(returnValue, DEFAULT_CHARSET);

//将取出的流对象转为utf-8的字符串对象

return new String(returnValue, DEFAULT_CHARSET);

}

} catch (UnsupportedEncodingException e) {

logger.error("【BlobTypeHandler】查询处理blob字段出错,错误原因为:" + e);

throw new RuntimeException("Blob Encoding Error!");

}

return result;

}

}

在mapper.xml文件中设置:

select * from tets WHERE id=#{id};

这样保存查询,更新都能正常使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值