hibernate大字段处理

本文介绍如何使用Hibernate处理大字段,例如存储图片等二进制数据。以Photo类为例,演示了如何定义POJO类和映射文件来支持Blob类型,并提供了web层的主要代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate大字段处理:以mysql为例
比如传张图片,把图片存到某个字段里。
POJO类里大字段类型为:[color=red]java.sql.Blob[/color]
1.Photo.java


import java.sql.Blob;


public class Photo implements java.io.Serializable {

private Integer pid;

private String pname;

private Blob photo;

public Photo() {
}

public Photo(String pname) {
this.pname = pname;
}


public Integer getPid() {
return this.pid;
}

public void setPid(Integer pid) {
this.pid = pid;
}

public String getPname() {
return this.pname;
}

public void setPname(String pname) {
this.pname = pname;
}

public Blob getPhoto() {
return photo;
}

public void setPhoto(Blob photo) {
this.photo = photo;
}


}


2.Photo.hbm.xml


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.pojo.Photo" table="photo" >
<id name="pid" type="java.lang.Integer">
<column name="pid" />
<generator class="native" />
</id>
<property name="pname" type="java.lang.String">
<column name="pname" length="10" not-null="true" />
</property>
<property name="photo" type="java.sql.Blob">
<column name="photo" />
</property>
</class>
</hibernate-mapping>



3.web层主要代码:


IndexForm indexForm = (IndexForm) form;
String pname = indexForm.getPanme();
FormFile photo = indexForm.getPhoto();
System.out.println(pname + " " + photo.getFileSize());
Photo p = new Photo();
p.setPname(pname);
try {
byte[] buf = photo.getFileData();
//通过Hibernate类将存图片内容的buf数组转成Blob类型
Blob ph = Hibernate.createBlob(buf);
p.setPhoto(ph);
PhotoDAO dao = new PhotoDAO();
dao.addPhoto(p);
//读取
Photo temp = dao.getByName(pname);
//通过java.sql.Blob.getBinaryStream()获得输入流,然后通过输出流输出到一个临时图片
InputStream in = temp.getPhoto().getBinaryStream();
OutputStream out = new FileOutputStream(new File("c:\\zk.jpg"));
in.read(buf);
out.write(buf);
in.close();
out.close();
request.getSession().setAttribute("link", "c:\\zk.jpg");
dao.closeSession();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值