spring hibernate mysql blob_使用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里的定义,我们必须要给出如下配置(在以前提到过):

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

lazy-init="true">

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

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

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

getHibernateTemplate().saveOrUpdate(o);

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

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

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

1048576

4096

我们需要在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叶面要显示照片的地方,我们像如下定义:

showImage.htm?dsbh=2

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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-06-19 09:56

浏览 1896

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值