前言: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+hibernate+spring+blob 三个框架集成了一下,主要包括利用struts的上传附件功能,并把上传的图片存储到oracle的blob字段。并提供显示。 没做过多的限制,还有很多bug别见怪,功能跑得通!
oracle+hibernate 处理blob +uploadify实例 结合了 uploadify 上传给件实例 如有需要的可以下载 文件上传组件 Uploadify-3.1-Demo实例详解 文档查看 都是免费的
struts2.1 + hibernate3.2 + spring 2.5 实现blob数据上传、下载
spring mvc+hibernate完成图片上传操作,存储至blob字段。
JDBC+Hibernate将Blob数据写入Oracle
有关jdbc+hibernate存取blob字段的知识
J2EE开发中,经常会遇到存储大文本的文字信息,而oracle数据库的vachar字段最大能存储4000个字节,存储更大的信息必须使用clob或blob字段,本文档就是针对j2ee开发中对colb字段操作的实现。
spring+mybatis下BLOB字段的图片存取代码,仅整理了Controller层的代码,service和dao的代码很简单,所以没有整理
是我自己验证过的 用的是oracle10数据库 文件里面有具体的配置。
Hibernate对BLOB CLOB操作,详细的操作说明
使用Hibernate映射Blob,Clob字段,并对这些字段完成存,取功能
一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...
使用JDBC和Hibernate来写入Blob型数据到Oracle中;使用JDBC和Hibernate来写入Blob型数据到Oracle中
hibernate对Blob类型字段进行数据添加.txt
JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等...
有关上传文件保存到数据库为blob类型的例子,共大家参考学习
Hibernate读取blob字段