`
小嘴冰凉
  • 浏览: 455921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Spring+hibernate透明操作blob(照片实例)

阅读更多

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

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

对应于数据库字段我们怎样定义hibernate 的hbm.xml和POJO,对应于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 整合hibernate的SessionFactory中将oracleLobHandler注入,如下:

<bean id="sessionFactory"

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

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

 

这样,我们就完成过了操作BLOB,CLOB的基本配置,以后我们操作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操作一模一样,下面给一个例子,如果我的这个TCks有byte[]类型对应上传的文件:

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已经展示了它在以前我们烦人的问题上展现了它独特的魅力。


分享到:
评论

相关推荐

    Struts+Spring+Hibernate开发实例祥解

    在Hibernate映射文件中,Blob字段的type设置为org.springframework.orm.hibernate3.support.BlobByteArrayType,以使用Spring提供的自定义类型。 **Hibernate框架**负责数据的持久化。在SSH架构中,Hibernate用于将...

    oracle+hibernate 处理blob +uploadify实例

    综上所述,这个实例展示了如何在Oracle数据库中使用Hibernate处理Blob数据,结合Uploadify实现文件上传。这种解决方案不仅适用于Oracle,理论上也适用于其他支持Blob类型的数据库,如MySQL和MSSQLServer。了解这些...

    移动ssh项目(struts+spring+hibernate+oracle).zip

    在这个名为“移动ssh项目(struts+spring+hibernate+oracle)”的压缩包中,我们可以看到一个利用这些技术构建的项目实例,结合Oracle数据库。以下是关于SSH框架及Oracle数据库的详细介绍: 1. Struts:Struts是MVC...

    spring1.2+hibernate3对大字段的处理实例,供大家学习与交流,可直接运行

    这个压缩包文件"spring1.2+hibernate3对大字段的处理实例"提供了一个具体的案例,演示了如何在Spring 1.2和Hibernate 3框架下解决这个问题。下面我们将深入探讨这些知识点。 首先,Spring 1.2是一个轻量级的Java...

    SSH框架 Struts+Spring+Hibernate+Ajax+功能齐全(验证码+二进制文件图片读写数据库)的网站.zip

    5. **图片处理**:项目涉及了二进制文件图片的读写操作,这通常涉及到BLOB类型字段的使用。在Hibernate中,可以通过配置实体类和映射文件来处理二进制数据。同时,Web应用程序可能包含JavaScript或Java代码来上传、...

    spring1.2+hibernate2对大字段的处理实例

    在提供的实例中,开发者可能已经展示了如何配置Spring1.2和Hibernate2来处理大字段,包括如何创建映射文件,如何定义实体类,以及如何在服务层和DAO层进行操作。学习这个实例可以帮助理解如何在实际项目中解决类似的...

    kateshdmade-small-online-shop:Spring+ HIBERNATE + AZURE SQL BBDD +上传项目图像的AZURE存储

    Hibernate是一个强大的对象关系映射(ORM)框架,它可以将Java类与数据库表进行映射,使得开发者可以使用面向对象的方式来操作数据库。在本项目中,Hibernate可能用于简化SQL查询和对象的持久化,通过提供一套API来...

    对blob大数据的操作——图片上传与显示*(自己实践可用)

    对Blob大数据的操作——图片上传与显示 在本文中,我们将探讨如何使用SSH2框架将图片上传到Oracle数据库中,...同时,我们还探讨了如何在Service层使用事务处理代理,并如何配置Spring和Hibernate来支持Blob类型数据。

    ssh(structs,spring,hibernate)框架中的上传下载

     由于Spring通过代理Hibernate完成数据层的操作,所以原Hibernate的配置文件hibernate.cfg.xml的信息也转移到Spring的配置文件中:  代码 4 Spring中有关Hibernate的配置信息 1. 2. !-- 数据源的配置 //--> 3. ...

    Spring.3.x企业应用开发实战(完整版).part2

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

    Spring3.x企业应用开发实战(完整版) part1

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Hibernate将图片插入数据库

    Hibernate作为Java领域的一个流行ORM(对象关系映射)框架,能够简化数据库操作,使开发者可以使用面向对象的方式来处理数据。 首先,我们需要理解数据库中的BLOB类型。BLOB(Binary Large Object)是用于存储大量...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Java+MySql图片数据保存与读取的具体实例

    - **ORM框架**:Hibernate等ORM框架能够将数据库操作对象化,处理Blob数据更加方便。 5. **image.rar文件** 这个rar文件可能包含了演示代码、示例图片或者其他相关资源,解压后可以参考和学习如何在实际项目中...

    SSH技术字典,J2EE主流应用框架

    它将Struts作为前端MVC框架,Spring用于业务逻辑层管理和控制反转(IoC),而Hibernate则负责数据持久化操作。 1. **Struts**: 一种基于Servlet/JavaServer Pages (JSP)的MVC框架,用于构建可扩展的企业级Web应用。...

    基于Hibernate的留言薄《HiMessage 留言薄》

    总的来说,《HiMessage 留言薄》是一个综合性的项目,涵盖了Java Web开发的多个方面,对开发者的要求较高,同时也是学习和实践Hibernate及其他相关技术的好实例。通过这个项目,开发者能够提升自己的技能,理解Web...

    Java持久性和休眠指南(S. Hennebrueder)Guide to Java Persistence and Hibernate (S. Hennebrueder)

    Hibernate可以用于构建多层次的应用架构,它支持MVC架构模式,并且可以与Spring框架等其他Java EE技术集成,构建强大的企业级应用。 ### 17. 本书作者和版本 本书由Sebastian Hennebrueder撰写,旨在为Java开发者...

    SSH范例源码(李兴华)

    它会教你如何使用Spring进行依赖注入,如何利用Struts处理用户交互,以及如何借助Hibernate进行数据库操作。同时,你还能了解到如何实现常见的Web功能,如分页、文件上传和下载以及报表导出。对于初学者来说,这是一...

Global site tag (gtag.js) - Google Analytics