欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

MyBatis处理CLOB/BLOB类型数据以及解决读取问题

2025年04月01日 Java
前言使用mybatis时有两个类型需要特殊处理,blob(binary large object)是指二进制大对象字段,clob(character large object)是指大字符对象。其中bl

前言

使用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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。