Hibernate Blob数据类型映射的一个例子

转自:http://developer.51cto.com/art/200906/130231.htm

以下为Hibernate Blob数据类型映射的一个例子,通过例子来把握Hibernate Blob数据类型映射。

Hibernate Blob:Java 代码:

 
  1. publicclassUserimplements
  2. Java.io.Serializable{
  3. //Fields
  4. privatelongid;
  5. privateStringname;
  6. privateStringemail;
  7. privateStringaddr;
  8. //定义Blob的pthto
  9. privateBlobphoto;

Hibernate Blob:xml 代码:

 
  1. <Hibernate-mapping>
  2. <classname="org.tie.User"table="user"catalog="tie">
  3. <idname="id"type="long">
  4. <columnname="id"/>
  5. <generatorclass="identity"/>
  6. </id>
  7. <propertyname="name"type="string">
  8. <columnname="name"length="45"not-null="true"/>
  9. </property>
  10. <propertyname="email"type="string">
  11. <columnname="email"length="45"/>
  12. </property>
  13. <propertyname="addr"type="string">
  14. <columnname="addr"length="45"/>
  15. </property>
  16. <!--映射blob类型-->
  17. <propertyname="photo"type="blob">
  18. <columnname="photo"/>
  19. </property>
  20. </class>
  21. </Hibernate-mapping>

两个测试方法:

Java 代码:

 
  1. publicvoidtestCreate(){
  2. Useruser=newUser();
  3. user.setName("linweiyang");
  4. user.setAddr("beijing");
  5. user.setEmail("[email protected]");
  6. Blobphoto=null;
  7. try{
  8. //将图片读进输入流分隔符:"c:"+File.separator+"a.jpg"
  9. FileInputStreamfis=newFileInputStream("c:\\a.jpg");
  10. //转成Blob类型
  11. photo=Hibernate.createBlob(fis);
  12. }catch(FileNotFoundExceptione){
  13. e.printStackTrace();
  14. }catch(IOExceptione){
  15. e.printStackTrace();
  16. }
  17. user.setPhoto(photo);
  18. Sessionsession=factory.openSession();
  19. Transactiontr=session.beginTransaction();
  20. session.save(user);
  21. tr.commit();
  22. session.close();
  23. }
  24. publicvoidtestRerieve(){
  25. Sessionsession=factory.openSession();
  26. Useruser=(User)session.load(User.class,newLong(3));
  27. try{
  28. //从数据库中要读取出来
  29. InputStreamis=user.getPhoto().getBinaryStream();
  30. //在把写到一个图片格式的文件里
  31. FileOutputStreamfos=newFileOutputStream("c:\\linweihan.jpg");
  32. byte[]buffer=newbyte[1024];
  33. intlen=0;
  34. //从数据库中读取到指定的字节数组中
  35. while((len=is.read(buffer))!=-1){
  36. //从指定的数组中读取,然后输出来,
  37. 所以这里buffer好象是连接inputStream和outputStream的一个东西
  38. fos.write(buffer,0,len);
  39. }
  40. }catch(FileNotFoundExceptione){
  41. e.printStackTrace();
  42. }catch(SQLExceptione){
  43. e.printStackTrace();
  44. }catch(IOExceptione){
  45. e.printStackTrace();
  46. }
  47. session.close();
  48. }

这么理解输入输出流,读入流自然要有读入的源头,输出也要输出到某个地方,输出一般是先要输读入,这里连接输入和输出的是一个在内存中的字节数组buffer.这样从数据库中读到这个数组里,输出流在从这个数组中输出到特定的文件格式里。以上便是Hibernate Blob数据类型映射的一个例子。

你可能感兴趣的:(Hibernate)