在网上搜了很多文章,发现要配置很多东东,而且,配置了也要报错,笔者发现一个无需特殊配置的方法,操作很简单,废话不多说,看代码:
package com.czp.test; public class BlobTest { private int id; private Object obj;//这里可以是任何对象 private byte[] bytes; public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } }
hibernate spring的配置省略,只需要将BlobTest的bytes属性在hibernate映射文件里映射为:<property name="bytes" type="binary" not-null="true" column="`XXXX`"></property>即可package com.czp.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.sql.Blob; import java.util.ArrayList; import java.util.List; import org.hibernate.Hibernate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class BlobDao extends HibernateDaoSupport{ /** * 保存对象 * @param blobTest * @throws Exception */ public void add(BlobTest blobTest) throws Exception { File file = File.createTempFile(blobTest.hashCode() + "", null); if (file != null) { ObjectOutputStream ob = new ObjectOutputStream(new FileOutputStream(file)); ob.writeObject(blobTest.getObj()); ob.flush(); ob.close(); ob = null; FileInputStream fis = new FileInputStream(file); byte[] b = new byte[fis.available()]; fis.read(b); fis.close(); blobTest.setBytes(b); this.getHibernateTemplate().save(blobTest); } } /** * 获取对象 * @return * @throws Exception */ @SuppressWarnings("unchecked") public List<BlobTest> getBlob() throws Exception { List<BlobTest> listtmp = new ArrayList<BlobTest>(); List<BlobTest> list = this.getHibernateTemplate().loadAll(BlobTest.class); for (BlobTest blt : list) { Blob b = Hibernate.createBlob(blt.getBytes()); ObjectInputStream ois = new ObjectInputStream(b.getBinaryStream()); Object obj = ois.readObject(); ois.close(); ois = null; blt.setObj(obj); listtmp.add(blt); } return listtmp ; } }