日期:2014-05-16 浏览次数:20751 次
一般网站在处理用户上传图片时通常采用两种策略:一是直接把图片存入数据库中的Blob字段;二是数据库中只存储图片的在服务器上的路径信息 ,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面img元素即可.在此不讨论两种方案的优劣,我只是写了个hibernate的例子 来实现第一种策略.例子很简单,t_user表主要两个字段,name和photo,其中photo字段类型为Blob.在此例中数据库我采用 mysql,oracle的Blob字段比较特殊,你必须自定义类型,具体的请自行搜索,这方面的资料很多.
//User.java
package com.denny_blue.hibernate; import java.io.Serializable; import java.sql.Blob; public class User implements Serializable{ private Integer id; private String name; private Blob photo; /** * @return the id */ public User(){ } public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the photo */ public Blob getPhoto() { return photo; } /** * @param photo the photo to set */ public void setPhoto(Blob photo) { this.photo = photo; } }
?
类User有3个属性,id,name,photo,相应的getter和setter方法以及一个无参构造函数.应该注意的是photo的类型java.sql.Blob
相应的user.hbm.xml应该如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.denny_blue.hibernate"> <class name="com.denny_blue.hibernate.User" table="t_user" dynamic-update="true" dynamic-insert="true" batch-size="3"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String" lazy="true"/> <property name="photo" column="photo" type="java.sql.Blob"/> </class> </hibernate-mapping>
?
对应的hibernate.cfg.xml配置文件,不再列出,请参照hibernate文档自行设定.
OK,做了这一步,我们写个测试类来进行单元测试:
package com.denny_blue.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.denny_blue.hibernate.User; import junit.framework.TestCase; public class HibernateTest extends TestCase { private Session session; protected void setUp() throws Exception { try{ Configuration config=new Configuration().configure();