Mybatis 处理 CLOB、BLOB 类型的数据

Java源码网 1月前 ⋅ 126 阅读 0 下载

Mybatis 处理 CLO、BLOB 类型的数据

BLOB 和 CLOB 都是大字段类型。 BLOB 是二进制存储的,而 CLOB 可以直接存储文本。 通常,图片、文件、音乐等信息都存储在 BLOB 字段中。 首先,将文件转换为二进制,然后存储在其中。文章或更长的文本存储在 CLOB 中。 不同数据库中对应的BLOB和CLOB类型也不同:在MySQL中,clob对应text/longtext,blob对应blob。 在Oracle中:clob对应clob,blob对应blob MyBatis提供了对CLOB/BLOB类型列的内置映射支持。

Create table statement:

create table user_pics( 
 id number primary key, 
 name varchar2(50) , 
 pic blob, 
 bio clob
);

Pictures (PICS) can be PNG,JPG or other formats. Brief information (bio) can be a long text description. By default, MyBatis maps CLOB columns to java.lang.String types and BLOB columns to byte [] types.

public class UserPic{ 
 private int id; 
 private String name; 
 private byte[] pic; 
 private String bio; 
 //setters & getters 
}

Map file:

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

Mapping interface:

public interface PicMapper {

 int insertUserPic(UserPic userPic);

 UserPic getUserPicById(int id); 

}

Test method:

public void test_insertUserPic(){
    String name = "tom";
    String bio = "Can be a very long string";
    byte[] pic = null;
    try {
        //Read user picture
        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();
    }

    //Prepare the data to be inserted into the database and encapsulate it as an object
    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();
    }
}

The following getUserPic() method reads CLOB type data to String type and BLOB type data to byte [] property:

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

全部评论: 0

    我有话说: