`
longzhun
  • 浏览: 368185 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用hibernate透明操作blob

阅读更多

前言:Oracleblob操作的复杂性我想很多人都见识过了,首先要插入一个空的blob以获得光标。。。。(此处省略n字)

首先我们介绍hibernate的对应的配置:

对应于数据库字段我们怎样定义hibernate hbm.xmlPOJO,对应于BLOB CLOB,我们在hbm.xml的定义方式如下:

BLOBàorg.springframework.orm.hibernate3.support.BlobByteArrayType

CLOBàorg.springframework.orm.hibernate3.support.ClobStringType

使用了上面的对应方式,在POJO里 对应的类型为 

BLOB对应定义为byte[]  

Clob对应定义为String

下面就轮到Spring里的定义,我们必须要给出如下配置(在以前提到过):

<bean id="nativeJdbcExtractor"    class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />

    <bean id="oracleLobHandler"

       class="org.springframework.jdbc.support.lob.OracleLobHandler"

       lazy-init="true">

       <property name="nativeJdbcExtractor">

           <ref bean="nativeJdbcExtractor" />

       </property>

    </bean>

定义了上面的oracleLobHandler,我们还必须在Spring 整合hibernateSessionFactory中将oracleLobHandler注入,如下:

<bean id="sessionFactory"

    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="lobHandler" ref="oracleLobHandler" />

 

这样,我们就完成过了操作BLOBCLOB的基本配置,以后我们操作hibernate对象时,里面有BLOB或者CLOB,我们的代码将和以前的代码一样,比如保存对象,下面一句话就 可以了,再也没有以前的烦恼了J

getHibernateTemplate().saveOrUpdate(o);

 

给出一个操作照片的例子(本文 上面提到的都已经配置好了):

为了有一个更加直观的认识,在这里,我要介绍的是利用Spring+hibernate实现透明的blob操 作,其中blob字段使用的是我们经常要处理的图片,整个过程包括图片上传到服务器,保存到oracle数据库,最后读取图片显示在页面上。

首先我们配置Spring MVC的上传组件:

<!-- Spring 文件上传 -->

    <bean id="multipartResolver"    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

       <!--使用Cos FileUpload的调用方法

           <bean id="multipartResolver" class="org.springframework.web.multipart.cos.CosMultipartResolver">

       -->

       <property name="maxUploadSize">

           <value>1048576</value>

       </property>

       <property name="maxInMemorySize">

           <value>4096</value>

       </property>

    </bean>

我们需要在Spring的配置文件中加入上面的片段,当然我们还需要下载commons-fileupload-1.1.jar,这样Spring会自动调用common-fileupload组件来完成上传,Spring还集成了Cos文件上传组件,这里我用的是common-fileupload,接着我们需要做的就是指定一个VO来进 行数据存放,一般我们会利用hibernate POJO进 行数据存放,这样我们不用进行任何的转换就可以进行保存了。

注意我们要将照片上传放在POJO对 应的byte[]字段,所以我们还要在我们的controllor(注意:继承的是SimpleFormControllor,当然这个控制器也配置好了CommandClass)里加上下面的代码添加一个属性编辑器将照片放在对应的byte[]字段里:

/**

* author:liushl

*/

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {

        binder.registerCustomEditor(byte[].class,new ByteArrayMultipartFileEditor());

    }

 

然后我们的代码和以前的普通的没有文件的form操 作一模一样,下面给一个例子,如果我的这个TCksbyte[]类型对应上传的文件

protected ModelAndView onSubmit(HttpServletRequest arg0, HttpServletResponse arg1, Object command, BindException arg3) throws Exception {

           TCks tCks=(TCks) command;

           tcksdao.save(tCks);

          

           return new ModelAndView(new RedirectView("index.do"));

    }

是不是和以前的代码没有任何不同呢J但是这里我们可是完成了文件上传、blob保 存一系列我们以前头痛的问题呢!

照片的显示也是一个问题呢,我们现在透明的完成了blob字段的保存和读取,但是我们记得现在我们的照片已经变成了byte[]了,所以,在照片的显示上,我们不能像普通的String 类型的字段返回给页面解析了,下面给出一个照片显示的代码例子:在服务器端:

public ModelAndView showImage(HttpServletRequest request, HttpServletResponse response) throws Exception {

       String dsbh = (String) request.getParameter("dsbh");

       Integer idsbh = new Integer(dsbh);

       TDs tds = tdsdao.get(idsbh);

       //显示照片。

       streamImage(tds.getZp(), response.getOutputStream());

       return null;

    }

public void streamImage(final byte[] blob, final OutputStream contentStream) throws Exception {

 

       ByteArrayInputStream is = new java.io.ByteArrayInputStream(blob);

       if (is != null) {

           FileCopyUtils.copy(is, contentStream);

                  }

           }

JSP叶面要显示照片的地方,我们像如下定义:

<img src="/webapp /showImage.htm?dsbh=2">

这样照片显示就完成了,至此,我想Spring+hibernate已经展示了它在以前我们烦人的问题上展现了它独特的魅力。

 

分享到:
评论

相关推荐

    Hibernate对BLOB CLOB操作

    在使用Hibernate操作BLOB和CLOB时,需要注意一些潜在的问题,比如内存管理,因为大数据对象可能会占用大量内存。另外,对于大文件的读写,可能需要分块处理,避免一次性加载整个文件到内存。同时,确保数据库支持...

    hibernate对Blob类型字段进行数据添加.txt

    本文档将详细介绍如何使用 Hibernate 对 Blob 类型字段进行数据添加的过程,并通过实际代码示例来展示具体的操作步骤。 #### Hibernate Blob 数据处理原理 在 Hibernate 中,Blob 类型的字段通常被映射为 `java....

    Hibernate操作Oarcle中Clob、Blob字段小结

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

    使用hibernate对oracle读取blob

    综上所述,使用Hibernate和JDBC读取Oracle数据库中的Blob数据涉及多个步骤,包括实体类的设计、数据库操作和文件流的处理。理解这些知识点对于处理大对象存储至关重要。在实际项目中,根据需求和性能考虑,选择合适...

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    如果使用Hibernate,操作Blob会更加简洁,因为Hibernate提供了对Blob对象的直接映射。你需要在实体类中定义一个Blob类型的属性,并在映射文件中配置它。然后,你可以直接将文件流写入这个属性,Hibernate会自动处理...

    Hibernate读取blob字段

    本篇文章将深入探讨如何使用Hibernate读取数据库中的Blob字段,以及涉及到的相关知识点。 首先,我们需要理解Blob类型在数据库中的含义。Blob是Binary Large Object的缩写,它是一种可以存储大量二进制数据的数据...

    JDBC+Hibernate将Blob数据写入Oracle

    在Oracle数据库中,BLOB类型的字段具有特殊的处理方式,尤其在使用JDBC(Java Database Connectivity)和Hibernate框架时,需要特别注意其写入过程。以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入...

    hibernate保存blob,clob对象

    总结,Hibernate通过`@Lob`注解支持BLOB和CLOB的持久化,开发者需要适当地将数据转换为对应的对象类型,然后使用Hibernate的CRUD操作进行保存和检索。同时,要注意性能优化,如懒加载和数据库特定的最佳实践。

    Hibernate对Blob,Clob的操作

    在Java Web开发中,Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。Blob和Clob是Java中用于处理大数据类型的数据对象,Blob用于存储二进制大对象,如图片、音频或视频...

    Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf

    在实际操作中,可以通过Hibernate实现Oracle数据库中BLOB数据的存储和删除操作,然后利用Struts2框架展示这些BLOB数据。这样的结合,不仅可以提高开发效率,还能保证应用的性能和稳定性。 ### 实际操作步骤 在实际...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    Oracle数据库提供了支持Clob和Blob的接口,而Hibernate作为与数据库交互的中间层,提供了便捷的方式来操作这些大型对象。 首先,Clob类型主要用来存储大量字符数据,例如长篇的文本、XML文档等。Blob则用于存储二...

    jdbc+hibernate存取blob字段

    本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...

    oracle+hibernate 处理blob +uploadify实例

    在本示例中,我们将探讨如何使用Oracle数据库、Hibernate ORM框架以及Uploadify插件处理Blob类型的大数据,如图片或文件上传。Blob(Binary Large Object)是数据库中用于存储二进制大对象的类型,常用于存储图片、...

    spring mvc+hibernate 图片存储至blob

    总结起来,"spring mvc+hibernate 图片存储至blob"这个主题涉及到Spring MVC处理文件上传、Hibernate将图片数据存入数据库BLOB字段、以及前后端交互等多个技术点。通过理解这些知识点,开发者可以构建一个完整的图片...

    C#,BLOB读取操作

    C# 中的 BLOB 读取操作 C# 中的 BLOB(Binary Large OBject)读取操作是指从数据库中读取二进制数据的过程。BLOB 是一种二进制数据类型,用于存储大规模的二进制数据,如图片、音频、视频等。在 C# 中,我们可以...

Global site tag (gtag.js) - Google Analytics