转自:http://developer.51cto.com/art/200906/130231.htm
以下为Hibernate Blob数据类型映射的一个例子,通过例子来把握Hibernate Blob数据类型映射。
Hibernate Blob:Java 代码:
- publicclassUserimplements
- Java.io.Serializable{
- //Fields
- privatelongid;
- privateStringname;
- privateStringemail;
- privateStringaddr;
- //定义Blob的pthto
- privateBlobphoto;
Hibernate Blob:xml 代码:
- <Hibernate-mapping>
- <classname="org.tie.User"table="user"catalog="tie">
- <idname="id"type="long">
- <columnname="id"/>
- <generatorclass="identity"/>
- </id>
- <propertyname="name"type="string">
- <columnname="name"length="45"not-null="true"/>
- </property>
- <propertyname="email"type="string">
- <columnname="email"length="45"/>
- </property>
- <propertyname="addr"type="string">
- <columnname="addr"length="45"/>
- </property>
- <!--映射blob类型-->
- <propertyname="photo"type="blob">
- <columnname="photo"/>
- </property>
- </class>
- </Hibernate-mapping>
两个测试方法:
Java 代码:
- publicvoidtestCreate(){
- Useruser=newUser();
- user.setName("linweiyang");
- user.setAddr("beijing");
- user.setEmail("linweiyang@163.com");
- Blobphoto=null;
- try{
- //将图片读进输入流分隔符:"c:"+File.separator+"a.jpg"
- FileInputStreamfis=newFileInputStream("c:\\a.jpg");
- //转成Blob类型
- photo=Hibernate.createBlob(fis);
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- user.setPhoto(photo);
- Sessionsession=factory.openSession();
- Transactiontr=session.beginTransaction();
- session.save(user);
- tr.commit();
- session.close();
- }
- publicvoidtestRerieve(){
- Sessionsession=factory.openSession();
- Useruser=(User)session.load(User.class,newLong(3));
- try{
- //从数据库中要读取出来
- InputStreamis=user.getPhoto().getBinaryStream();
- //在把写到一个图片格式的文件里
- FileOutputStreamfos=newFileOutputStream("c:\\linweihan.jpg");
- byte[]buffer=newbyte[1024];
- intlen=0;
- //从数据库中读取到指定的字节数组中
- while((len=is.read(buffer))!=-1){
- //从指定的数组中读取,然后输出来,
- 所以这里buffer好象是连接inputStream和outputStream的一个东西
- fos.write(buffer,0,len);
- }
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }catch(SQLExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- session.close();
- }
这么理解输入输出流,读入流自然要有读入的源头,输出也要输出到某个地方,输出一般是先要输读入,这里连接输入和输出的是一个在内存中的字节数组buffer.这样从数据库中读到这个数组里,输出流在从这个数组中输出到特定的文件格式里。以上便是Hibernate Blob数据类型映射的一个例子。