`
longzhun
  • 浏览: 374686 次
  • 性别: 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已经展示了它在以前我们烦人的问题上展现了它独特的魅力。

 

分享到:
评论

相关推荐

    Struts+Spring+Hibernate实现上传下载

    这样,即使不直接使用Oracle数据库驱动,也能透明地处理Blob数据。 5. **Hibernate映射**:在Hibernate的映射文件中,将Blob类型的数据库字段映射为Java的`byte[]`类型,并指定类型为`org.springframework.orm....

    hibernate注解处理映射关系共14页.pdf.zip

    1. **Hibernate概述**:Hibernate是Java平台上的一个开源ORM框架,它通过将Java对象与数据库表进行映射,实现了对象与SQL之间的透明交互,降低了数据库操作的复杂性。 2. **注解基础**:在Hibernate 3.2版本之后,...

    基于SSH+MySQL的学生成绩管理系统

    Hibernate通过ORM(对象关系映射)技术,将Java对象映射到数据库表,实现了数据库操作的透明化。在这个系统中,Hibernate可能被用来处理学生信息、成绩数据的CRUD(创建、读取、更新、删除)操作,同时支持学生照片...

    marlett_01_0109.pdf

    marlett_01_0109

    [AB PLC例程源码][MMS_040384]Winder Application.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    stassar_3cd_01_0716.pdf

    stassar_3cd_01_0716

    malpass_02_0907.pdf

    malpass_02_0907

    [AB PLC例程源码][MMS_046459]InView on EtherNet Add On Instruction.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例:matlab程序代码项目案例文档+程序具有输出LC滤波器的三相逆变器的前馈神经网络模型预测控制.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例:matlab程序代码项目案例基于运动学车辆模型的开放式驾驶MPC横向控制算法.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matsumoto_01_1107.pdf

    matsumoto_01_1107

    [AB PLC例程源码][MMS_045719]Rotary Knife with SoftLogix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    QT第五课-QT系统相关-文件

    代码

    大模型创业者手册-法务与产品合规篇.pdf

    大模型创业者手册-法务与产品合规篇.pdf

    [AB PLC例程源码][MMS_046456]ME Equipment Status Summary Faceplate for PowerFlex, Kinetix, E3 Plus,.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    指标体系数据开发.pptx

    指标体系数据开发

    半导体三极管β值测量仪的设计与制作

    半导体三极管β值测量仪的设计与制作

    [AB PLC例程源码][MMS_047416]ME Faceplates-AOIs for GuardLogix Safety Systems.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_041473]Input Time Stamping.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    本文将带你深入了解如何使用OpenCV库实现图片拼接技术,打造令人惊叹的全景图像。通过清晰的步骤讲解和代码示例

    本文将带你深入了解如何使用OpenCV库实现图片拼接技术,打造令人惊叹的全景图像。通过清晰的步骤讲解和代码示例

Global site tag (gtag.js) - Google Analytics