mybaits通过mapper文件进行数据库的增删改查操作,在进行增删改查操作时需要将java的数据类型与数据库的数据类型进行转换,此时就会用到TypeHandler类型处理器。mybatis内置了java基础数据类型的类型处理器,也支持自定义的类型处理器。
在博客系统开发时,对于博客文章的存储,我采用在oracle数据库中存储blob字段的形式,前端使用layui的富文本编辑器进行编辑和展示文章。前端传入需要保存的文章是一个string类型,怎样使用mybatis持久层保存到数据库的blob字段中呢,以及从数据库中查出blob字段并转换成java中的string类型以更好的返回给前端呢,此时就需要用到自定义的类型处理器。
1、自定义BlobTypeHandler类型处理:集成BaseTypeHandler类,实现抽象方法,在抽象方法中实现类型处理即可
/**
*
* @ClassName::BlobTypeHandler
* @Description: 自定义mybatis blob字段处理
* @author :柯雷
* @date :2018年9月28日 下午2:54:36
*
*/
public class BlobTypeHandler extends BaseTypeHandler<String> {
/**
* @Description 日志打印对象
*/
Logger logger = LoggerFactory.getLogger(BlobTypeHandler.class);
/**
* <p>Title:setNonNullParameter</p>
* <p>Description:insert或者update时前处理blob字段 </p>
* @param ps
* @param i
* @param parameter
* @param jdbcType
* @throws SQLException
* @see org.apache.ibatis.type.BaseTypeHandler#setNonNullParameter(java.sql.PreparedStatement, int, java.lang.Object, org.apache.ibatis.type.JdbcType)
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
throws SQLException {
logger.info("【BlobTypeHandler】insert或者update时处理blob字段:");
//声明一个输入流对象
ByteArrayInputStream bis = null;
try {
//把字符串转为字节流
bis = new ByteArrayInputStream(parameter.getBytes("gbk"));
} catch (Exception 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("