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
}
映射文件:
select my_seq.nextval from dual
insert into user_pics(id,name, pic,bio)
values(#{id},#{name},#{pic},#{bio})
select * from user_pics where id=#{id}
映射接口:
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();
}
}
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!