2007年11月15日 22:09:57
blob与clob在hibernate中的使用
|
在Hibernate中,您可以直接对Blob、Clob作映像,例如在MySQL中,您的数据库表格若是这么建立的: CREATE TABLE user ( id INT(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(100) NOT NULL default '', age INT, photo BLOB, resume Text )engine=innodb; 您可以定义一个User类别,并让属性包括java.sql.Blob与java.sql.Clob,如下: User.java package onlyfun.caterpillar; import java.sql.Blob; import java.sql.Clob; public class User { private Integer id; private String name; private Integer age; private Blob photo; private Clob resume; // 必须要有一个预设的建构方法 // 以使得Hibernate可以使用Constructor.newInstance()建立对象 public User() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Blob getPhoto() { return photo; } public void setPhoto(Blob photo) { this.photo = photo; } public Clob getResume() { return resume; } public void setResume(Clob resume) { this.resume = resume; } } 接着在映射文件中,可以如下定义: User.hbm.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <hibernate-mapping> <class name="onlyfun.caterpillar.User" table="user"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String"/> <property name="age" column="age" type="java.lang.Integer"/> <property name="photo" column="photo" type="java.sql.Blob"/> <property name="resume" column="resume" type="java.sql.Clob"/> </class> </hibernate-mapping> 在进行数据储存时,可以使用Hibernate.createBlob()与Hibernate.createClob()从来源数据建立Blob与Clob实例,例如: FileInputStream fileInputStream = new FileInputStream("c:\\workspace\\photo.jpg"); Blob photo = Hibernate.createBlob(fileInputStream); Clob resume = Hibernate.createClob("Bla....Bla....resume text!!"); User user = new User(); user.setName("caterpillar"); user.setAge(new Integer(30)); user.setPhoto(photo); user.setResume(resume); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.save(user); tx.commit(); session.close(); 如果打算从数据库中取得数据,则一个范例如下所示: Session session = sessionFactory.openSession(); User user = (User) session.load(User.class, new Integer(1)); System.out.print(user.getAge() + "\t" + user.getName() + "\t"); String resume = user.getResume().getSubString(1, (int) user.getResume().length()); System.out.println(resume); // 将Blob数据写到档案 InputStream inputStream = user.getPhoto().getBinaryStream(); FileOutputStream fileOutputStream = new FileOutputStream("c:\\workspace\\photo_save.jpg"); byte[] buf = new byte[1]; int len = 0; while((len = inputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, len); } inputStream.close(); fileOutputStream.close(); System.out.println("save photo to c:\\workspace\\photo_save.jpg"); session.close(); 在MySQL中对Blob与Clob是比较简单的,如果在Oracle DB中则复杂一些,您可以参考 Using Clobs/Blobs with Oracle and Hibernate。
Tags:
blob与clob
|
一共有 0 条评论