以下为Hibernate Blob数据类型映射的一个例子,通过例子来把握Hibernate Blob数据类型映射。
说明:BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
以MySQL数据库为例,有四种BLOB类型
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
实际使用中根据需要存入的数据大小定义不同的BLOB类型。
需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。
Serviceinfo.java
public class Serviceinfo implements java.io.Serializable {
private Integer sid;
private String serviceName;
private Blob wsdl;
public Serviceinfo() {}
public Integer getSid() {
return this.sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getServiceName() {
return this.serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public Blob getWsdl() {
return wsdl;
}
public void setWsdl(Blob wsdl) {
this.wsdl = wsdl;
}
}
Serviceinfo.hbm.xml
<hibernate-mapping>
<class name="cn.edu.tju.ikse.sn.bean.Serviceinfo" table="serviceinfo" catalog="sn">
<id name="sid" type="integer">
<column name="sid" />
<generator class="increment" />
</id>
<property name="serviceName" type="string">
<column name="service_name" length="256" />
</property>
<property name="wsdl" type="blob">
<column name="wsdl" />
</property>
</class>
</hibernate-mapping>
测试代码
testCreate将getWeather.wsdl文件写入blob字段
testRerieve从blob字段中读取到出来,写到一个文件中
public void testCreate(){
Serviceinfo s= new Serviceinfo();
s.setName("getWeather");
Blob wsdl= null;
try {
//将wsdl文件读进输入流
FileInputStream fis = new FileInputStream("c:\\getWeather.wsdl");
//转成Blob类型
photo = Hibernate.createBlob(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
s.setWsdl(wsdl);
Session session = HibernateSessionFactory.getSession();
Transaction tr = session.beginTransaction();
session.save(s);
tr.commit();
session.close();
}
public void testRerieve {
Session session = HibernateSessionFactory.getSession();
Serviceinfo s = (Serviceinfo) session.load(Serviceinfo.class, new Integer(1));
try {
// 从数据库中要读取出来
InputStream is = s.getWsdl().getBinaryStream();
// 在把写到一个txt的文件里
FileOutputStream fos = new FileOutputStream("c:\\wsdl.txt");
byte[] buffer = new byte[1024];
int len = 0;
// 从数据库中读取到指定的字节数组中
while ((len = is.read(buffer)) != -1) {
// 从指定的数组中读取,然后输出来,
// 所以这里buffer好象是连接inputStream和outputStream的一个东西
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
session.close();
}
这么理解输入输出流,读入流自然要有读入的源头,输出也要输出到某个地方,输出一般是先要输读入,这里连接输入和输出的是一个在内存中的字节数组 buffer.这样从数据库中读到这个数组里,输出流在从这个数组中输出到特定的文件格式里。以上便是Hibernate Blob数据类型映射的一个例子。
分享到:
相关推荐
BLOB 类型是数据库系统中用于存储大量二进制数据的数据类型。在 Java 应用开发中,尤其是使用 ORM 框架如 Hibernate 进行持久化层开发时,如何高效地处理 BLOB 类型字段成为了一个关键问题。 本文档将详细介绍如何...
标题:“Hibernate数据类型映射及ID” 描述:“Hibernate与各数据库数据类型的映射” ### Hibernate数据类型映射 Hibernate作为一款流行的Java持久层框架,它提供了丰富的数据类型映射功能,使得开发者能够更加...
Hibernate提供了`BlobType`等类型映射器来简化BLOB字段的读写操作。开发者可以通过实体类中的字段直接与BLOB类型的数据库字段关联,Hibernate会在后台自动处理BLOB的读取和写入过程。 总之,无论是使用JDBC还是...
总的来说,理解 Hibernate 中的数据类型映射是进行数据库操作的关键,它有助于确保数据在 Java 应用程序和数据库之间的准确传输,并确保程序的稳定性和兼容性。正确选择和配置这些类型可以避免许多潜在的问题,如...
在Java的持久化框架Hibernate中,BLOB(Binary Large Object)数据类型被用来...总之,Hibernate提供了方便的机制来处理BLOB数据类型,但同时也需要开发者在处理大数据时注意性能和资源管理,以确保应用的稳定和高效。
这里,我们提到了一个名为“Hibernate的映射类型_hibernate_mysql映射类型.doc”的文档,这很可能是一个详细的对照表,列出了Hibernate如何将Java数据类型映射到MySQL数据库的SQL数据类型。MySQL是世界上最流行的...
综上所述,使用Hibernate读取Blob字段涉及到配置映射文件、定义实体类中的Blob属性、执行查询以及流式处理Blob数据。理解这些概念和实践方法,可以帮助我们有效地管理和操作大数据类型的持久化对象。在实际项目中,...
在实际操作中,可以通过Hibernate实现Oracle数据库中BLOB数据的存储和删除操作,然后利用Struts2框架展示这些BLOB数据。这样的结合,不仅可以提高开发效率,还能保证应用的性能和稳定性。 ### 实际操作步骤 在实际...
Hibernate作为一款流行的ORM(对象关系映射)框架,提供了与Oracle数据库交互的简便方式,包括处理Blob数据。本文将详细介绍如何使用Hibernate和JDBC读取和存储Oracle数据库中的Blob对象。 ### 1. Hibernate Blob...
在Java的持久化框架Hibernate中,Blob和Clob对象是用来处理大数据类型的,它们分别对应数据库中的BLOB(Binary Large Object)和CLOB(Character Large Object)。这篇文章将详细讲解如何在Hibernate中保存这两种...
二进制数据类型如图片、文件等可以使用`binary`,它映射为`VARBINARY`或`BLOB`;`text`对应长文本,映射为`CLOB`;`serializable`用于序列化Java对象,映射为`VARBINARY`(或`BLOB`);`clob`和`blob`直接对应数据库...
// 获取BLOB数据 String bio = user.getBio(); // 获取CLOB数据 // 可以将imageBytes写入文件,bio显示在界面上 transaction.commit(); session.close(); ``` 这里使用了Apache的Commons IO库来读取文件到字节...
7. 更新记录,将Blob数据设置为已写入的值: ```java pstmt = conn.prepareStatement("update tablename set content=? where name=?"); pstmt.setBlob(1, blob); pstmt.setString(2, "name"); pstmt....
在Hibernate中,类型映射是至关重要的概念,因为它负责将Java对象的属性与数据库表中的列进行对应。下面我们将详细探讨Hibernate中的类型映射以及其与Java类型和标准SQL类型的对应关系。 1. `integer`:在Hibernate...
- Hibernate源码中,`org.hibernate.type`包下的`ClobType`和`BlobType`类实现了对Clob和Blob的类型映射。理解这些类型的实现可以帮助我们更深入地了解数据的存储和处理过程。 6. **工具使用**: - 可能会提到...
在这个项目中,Blob数据类型被用于存储非结构化的二进制大对象,比如图片、音频或文档。Blob在Java中对应的数据类型是java.sql.Blob,它允许我们在数据库中存储大量数据。实现Blob数据的上传和下载,需要考虑以下几...
在Oracle数据库中,Hibernate提供了与这些数据类型的交互方式。本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`...
Blob和Clob是Java中用于处理大数据类型的数据对象,Blob用于存储二进制大对象,如图片、音频或视频,而Clob则用于存储字符大对象,如长文本。本文将详细介绍如何在Hibernate中操作Blob和Clob字段,实现数据的存储与...