在Hibernate中,可以直接对Blob、Clob作映射。
DDL如下:
1.CREATE TABLE user (<br />2. id INT(11) NOT NULL auto_increment PRIMARY KEY,<br />3. name VARCHAR(100) NOT NULL default '',<br />4. age INT,<br />5. photo BLOB,<br />6. resume TEXT<br />7.);
注意:由于BLOB字段大小不可预计,有时需要增大BLOB字段的大小,可在数据库中改用MEDIUMBLOB甚至LONGBLOB。
User.java
1.package com.hb3.pack_07.model;<br />2.<br />3.import java.sql.Blob;<br />4.import java.sql.Clob;<br />5.6.public class User {<br />7.8. private Integer id;<br />9. private String name;<br />10. private Integer age;<br />11. private Blob photo;<br />12. private Clob resume;<br />13.<br />14. public User() {<br />15. }<br />16.17. public Integer getId() {<br />18. return id;<br />19. }<br />20. public void setId(Integer id) {<br />21. this.id = id;<br />22. }<br />23. public String getName() {<br />24. return name;<br />25. }<br />26. public void setName(String name) {<br />27. this.name = name;<br />28. }<br />29. public Integer getAge() {<br />30. return age;<br />31. }<br />32. public void setAge(Integer age) {<br />33. this.age = age;<br />34. }<br />35. public Blob getPhoto() {<br />36. return photo;<br />37. }<br />38. public void setPhoto(Blob photo) {<br />39. this.photo = photo;<br />40. }<br />41. public Clob getResume() {<br />42. return resume;<br />43. }<br />44. public void setResume(Clob resume) {<br />45. this.resume = resume;<br />46. }<br />47.}
User.hbm.xml文件:
1.<?xml version="1.0" encoding="UTF-8"?><br />2.3.<!DOCTYPE hibernate-mapping PUBLIC<br />4. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />5. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">6.7.<hibernate-mapping>8.9. <class name="com.hb3.pack_07.model.User" table="user">10.<br />11. <id name="id" column="id" type="java.lang.Integer"><br />12. <generator class="native"/><br />13. </id><br />14.<br />15. <property name="name" column="name" type="java.lang.String"/><br />16.<br />17. <property name="age" column="age" type="java.lang.Integer"/><br />18.<br />19. <property name="photo" column="photo" type="java.sql.Blob"/><br />20.<br />21. <property name="resume" column="resume" type="java.sql.Clob"/><br />22.<br />23. </class>24.<br />25.</hibernate-mapping>
修改hibernate.cfg.xml文件如下:
............
测试代码如下:
1.package com.hb3.pack_07;<br />2.<br />3.import java.io.FileInputStream;<br />4.import java.io.FileOutputStream;<br />5.import java.io.IOException;<br />6.import java.io.InputStream;<br />7.import java.sql.Blob;<br />8.import java.sql.Clob;<br />9.import java.sql.SQLException;<br />10.11.import org.hibernate.Hibernate;<br />12.import org.hibernate.Session;<br />13.import org.hibernate.SessionFactory;<br />14.import org.hibernate.Transaction;<br />15.import org.hibernate.cfg.Configuration;<br />16.17.import com.hb3.pack_07.model.User;<br />18.19.public class BusinessService {<br />20.21. public static void main(String[] args) throws IOException, SQLException {<br />22.<br />23. Configuration config = new Configuration().configure();<br />24. SessionFactory sessionFactory = config.buildSessionFactory();<br />25. Session session = sessionFactory.openSession();<br />26.27. FileInputStream fileInputStream = new FileInputStream("c://sunset.jpg");<br />28. Blob photo = Hibernate.createBlob(fileInputStream);<br />29. Clob resume = Hibernate.createClob("Bla....Bla....resume text!!");<br />30.<br />31. User user = new User();<br />32. user.setName("shenbin");<br />33. user.setAge(new Integer(28));<br />34. user.setPhoto(photo);<br />35. user.setResume(resume);<br />36.37. Transaction tx = session.beginTransaction();<br />38. session.save(user);<br />39. tx.commit();<br />40.<br />41. session.close();<br />42. session = sessionFactory.openSession();<br />43.<br />44. user = (User) session.load(User.class, new Integer(1));<br />45. System.out.print(user.getAge() + "/t" +<br />46. user.getName() + "/t");<br />47. String str_resume = user.getResume().getSubString(1, (int) user.getResume().length());<br />48. System.out.println(str_resume);<br />49. InputStream inputStream = user.getPhoto().getBinaryStream();<br />50. FileOutputStream fileOutputStream = new FileOutputStream("c://sunset_save.jpg");<br />51. byte[] buf = new byte[1];<br />52. int len = 0;<br />53. while((len = inputStream.read(buf)) != -1) {<br />54. fileOutputStream.write(buf, 0, len);<br />55. }<br />56. inputStream.close();<br />57. fileOutputStream.close();<br />58. System.out.println("save photo to c://sunset_save.jpg");<br />59.60. session.close();<br />61. sessionFactory.close();<br />62. }<br />63.}
在MySQL中对BLOB以及CLOB类型的使用还是比较简单的,如果在Oracle DB中则相对复杂一些,计划在以后章节加以说明。
可先参阅:http://blog.csdn.net/fhway/archive/2006/11/01/1359482.aspx
想想我的影子,我会在你身后给你一个拥抱;