mybatis 处理CLOB/BLOB类型数据
程序员文章站
2023-11-23 08:10:22
BLOB和CLOB都是大字段类型。 BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。 通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。文章或者是较长的文字,就用CLOB存储. BLOB和CLOB在不同的数据库中对应的类型也不一样: MySQL 中:clo ......
blob和clob都是大字段类型。
blob是按二进制来存储的,而clob是可以直接存储文字的。
通常像图片、文件、音乐等信息就用blob字段来存储,先将文件转为二进制再存储进去。文章或者是较长的文字,就用clob存储.
blob和clob在不同的数据库中对应的类型也不一样:
mysql 中:clob对应text/longtext,blob对应blob
oracle中:clob对应clob,blob对应blob
mybatis提供了内建的对clob/blob类型列的映射处理支持。
建表语句:
create table user_pics( id number primary key, name varchar2(50) , pic blob, bio clob );
照片(pic)可以是png,jpg或其他格式的。简介信息(bio)可以是学比较长的文字描述。默认情况下,mybatis将clob类型的列映射到java.lang.string类型上、而把blob列映射到byte[]类型上。
public class userpic{ private int id; private string name; private byte[] pic; private string bio; //setters & getters }
映射文件:
<insert id="insertuserpic" parametertype="userpic"> <selectkey keyproperty="id" resulttype="int" order="before"> select my_seq.nextval from dual </selectkey> insert into user_pics(id,name, pic,bio) values(#{id},#{name},#{pic},#{bio}) </insert> <select id="getuserpicbyid" parametertype="int" resulttype="userpic"> select * from user_pics where id=#{id} </select>
映射接口:
public interface picmapper { int insertuserpic(userpic userpic); userpic getuserpicbyid(int id); }
测试方法:
public void test_insertuserpic(){ string name = "tom"; string bio = "可以是很长的字符串"; byte[] pic = null; try { //读取用户头像图片 file file = new file("src/com/briup/special/1.gif"); inputstream is = new fileinputstream(file); pic = new byte[is.available()]; is.read(pic); is.close(); } catch (exception e){ e.printstacktrace(); } //准备好要插入到数据库中的数据并封装成对象 userpic userpic = new userpic(name, pic , bio); sqlsession sqlsession = null; try{ sqlsession = mybatissqlsessionfactory.opensession(); specialmapper mapper = sqlsession.getmapper(specialmapper.class); mapper.insertuserpic(userpic); sqlsession.commit(); }catch (exception e) { e.printstacktrace(); } }
下面的getuserpic()方法将clob类型数据读取到string类型,blob类型数据读取成byte[]属性:
@test public void test_getuserpicbyid(){ sqlsession sqlsession = null; try { sqlsession = mybatissqlsessionfactory.opensession(); specialmapper mapper = sqlsession.getmapper(specialmapper.class); userpic userpic = mapper.getuserpicbyid(59); system.out.println(userpic.getid()); system.out.println(userpic.getname()); system.out.println(userpic.getbio()); system.out.println(userpic.getpic().length); } catch (exception e) { e.printstacktrace(); } }