当前位置: 移动技术网 > IT编程>开发语言>Java > mybatis 处理CLOB/BLOB类型数据

mybatis 处理CLOB/BLOB类型数据

2019年10月16日  | 移动技术网IT编程  | 我要评论

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();
            }

}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网