MyBatis处理CLOB/BLOB类型数据以及解决读取问题
作者:luckySnow-julyo
这篇文章主要介绍了MyBatis处理CLOB/BLOB类型数据以及解决读取问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
前言
使用Mybatis时有两个类型需要特殊处理,Blob(Binary Large Object)是指二进制大对象字段,Clob(Character Large Object)是指大字符对象。其中Blob是为存储大的二进制数据而设计的,而Clob是为存储大的文本数据而设计的。
JDBC的PreparedStatement和ResultSet都提供了相应的方法来支持Blob和Clob操作,Mybatis各版本也支持对Blob或者Clob的存储以及读取操作,本文详细介绍Mybatis中Clob字段的操作。
一、CLOB和BLOB介绍
BLOB和CLOB都是大字段类型。(java)
BLOB是按二进制来存储的,而CLOB是能够直接存储文字的。(sql)
一般像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。文章或者是较长的文字,就用CLOB存储数据库
BLOB和CLOB在不一样的数据库中对应的类型也不同:
- MySQL 中:clob对应text/longtext,blob对应blob
- Oracle中:clob对应clob,blob对应blob
MyBatis提供了内建的对CLOB/BLOB类型列的映射处理支持。(app)
二、编写Mapper文件
如下所示:Mapper文件中查询sql的id为queryByList,report_summary为Oracle数据库中的一个字段,是CLOB类型。
myClob为java类,在java类中定义一个String类型的字段reportSummary,用于接收CLOB信息。
Mapper.xml文件加入如下配置可以读取CLOB和BLOB类型的数据
jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BLOBTypeHandler"
<select id="queryByList" parameterType="Map" resultMap="queryBaseResultMap"> select id ,title,type,report_summary,author from my_clob where 1 = 1 order by ${orderByClause} </select> <resultMap id="queryBaseResultMap" type="com.mxm.model.MyClob" > <id column="Id" property="id" jdbcType="INTEGER" /> <result column="type" property="type" jdbcType="INTEGER" /> <result column="title" property="title" jdbcType="VARCHAR" /> <result column="author" property="author" jdbcType="VARCHAR" /> <result column="report_summary" property="reportSummary" jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler"> </resultMap>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。