Spring+Hibernate实现Oracle的BLOB、CLOB上传
2008-01-08 22:57
597 查看
现在网上有很多这方面的资料,但是很多都是互相转贴而来。2006年我们做了一个油田方面的项目,是关于油藏描述的,其中涉及了非常多的资料需要上传到Oracle数据库中,我查了很多资料,摸索了很长一段时间,现在我将自己总结的发布一下,如有什么问题,还请各位网友多多指导。
我们采用的是Spring1.2.7,Hibernate3.0,MyEclipse4.1,Eclipse3.1.1
服务器用Weblogic9.1
将Spring、Hibernate和commons-fileupload-1.0.jar等相应的jar文件加载;
1.pojo中:
Java代码
将BLOB字段映射为byte[],如:private byte[] wjsj;
将CLOB字段映射为String;
2.Hibernate映射文件(**.hbm.xml)中:
Java代码
BLOB字段映射为:org.springframework.orm.hibernate3.support.BlobByteArrayType,如:
<property name="wjsj" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" lazy="true">
<column name="WJSJ"/>
</property>
CLOB字段映射为:
type="org.springframework.orm.hibernate3.support.ClobStringType"或type="text"
3.配置文件(applicationContext.xml)中:
引用
Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对Lob字段的操作,必须执行两步数据库访问操作,先Insert再Update。BlobByteArrayType数据类型通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般字段业类型无异。LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。
Java代码
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true">
</bean>
<bean id="lobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
//Spring对文件上传的支持由内置的multipart包中的插件对象MultipartResovler来完成的,使用common-fileupload.jar的调用方法
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>1073741824</value>//设置上传文件最大值
</property>
<property name="maxInMemorySize">
<value>1048576</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>将上面的lobHandler注入到Hibernate的Session工厂中
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/fileuplaod/spring/pojo</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
</props>
</property>
</bean>
4.页面中:
Java代码
在form中加enctype=“multipart/form-data”属性;
5.控制类(Controller)中:
继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController
Java代码
abstract public class BaseController extends MultiActionController {
/**
* 初始化binder,注册Editor
*/
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) {
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());//BLOB
binder.registerCustomEditor(String.class, new StringMultipartFileEditor());//CLOB
}
}
Java代码
/**
* 绑定并校验对象
*控制类中最重要的方法是initBinder()它给spring注册了一个编辑器对request中的mu*ltipart实体进行处理,如果没有这个方法,上传将不能进行。
*/
protected BindException bindObject(HttpServletRequest request,
Object command) throws Exception {
preBind(request, command);
ServletRequestDataBinder binder = createBinder(request, command);
initBinder(request,binder);
binder.bind(request);
}
我们采用的是Spring1.2.7,Hibernate3.0,MyEclipse4.1,Eclipse3.1.1
服务器用Weblogic9.1
将Spring、Hibernate和commons-fileupload-1.0.jar等相应的jar文件加载;
1.pojo中:
Java代码
将BLOB字段映射为byte[],如:private byte[] wjsj;
将CLOB字段映射为String;
将BLOB字段映射为byte[],如:private byte[] wjsj; 将CLOB字段映射为String;
2.Hibernate映射文件(**.hbm.xml)中:
Java代码
BLOB字段映射为:org.springframework.orm.hibernate3.support.BlobByteArrayType,如:
<property name="wjsj" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" lazy="true">
<column name="WJSJ"/>
</property>
CLOB字段映射为:
type="org.springframework.orm.hibernate3.support.ClobStringType"或type="text"
BLOB字段映射为:org.springframework.orm.hibernate3.support.BlobByteArrayType,如: <property name="wjsj" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" lazy="true"> <column name="WJSJ"/> </property> CLOB字段映射为: type="org.springframework.orm.hibernate3.support.ClobStringType"或type="text"
3.配置文件(applicationContext.xml)中:
引用
Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对Lob字段的操作,必须执行两步数据库访问操作,先Insert再Update。BlobByteArrayType数据类型通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般字段业类型无异。LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。
Java代码
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true">
</bean>
<bean id="lobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
//Spring对文件上传的支持由内置的multipart包中的插件对象MultipartResovler来完成的,使用common-fileupload.jar的调用方法
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>1073741824</value>//设置上传文件最大值
</property>
<property name="maxInMemorySize">
<value>1048576</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>将上面的lobHandler注入到Hibernate的Session工厂中
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/fileuplaod/spring/pojo</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
</props>
</property>
</bean>
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"> </bean> <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"> <property name="nativeJdbcExtractor"> <ref local="nativeJdbcExtractor" /> </property> </bean> //Spring对文件上传的支持由内置的multipart包中的插件对象MultipartResovler来完成的,使用common-fileupload.jar的调用方法 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <value>1073741824</value>//设置上传文件最大值 </property> <property name="maxInMemorySize"> <value>1048576</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="lobHandler" ref="lobHandler"/>将上面的lobHandler注入到Hibernate的Session工厂中 <property name="mappingDirectoryLocations"> <list> <value>classpath:/com/fileuplaod/spring/pojo</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop> </props> </property> </bean>
4.页面中:
Java代码
在form中加enctype=“multipart/form-data”属性;
在form中加enctype=“multipart/form-data”属性;
5.控制类(Controller)中:
继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController
Java代码
abstract public class BaseController extends MultiActionController {
/**
* 初始化binder,注册Editor
*/
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) {
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());//BLOB
binder.registerCustomEditor(String.class, new StringMultipartFileEditor());//CLOB
}
}
abstract public class BaseController extends MultiActionController { /** * 初始化binder,注册Editor */ protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) { binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());//BLOB binder.registerCustomEditor(String.class, new StringMultipartFileEditor());//CLOB } }
Java代码
/**
* 绑定并校验对象
*控制类中最重要的方法是initBinder()它给spring注册了一个编辑器对request中的mu*ltipart实体进行处理,如果没有这个方法,上传将不能进行。
*/
protected BindException bindObject(HttpServletRequest request,
Object command) throws Exception {
preBind(request, command);
ServletRequestDataBinder binder = createBinder(request, command);
initBinder(request,binder);
binder.bind(request);
}
相关文章推荐
- Spring和Hibernate整合实现Oracle的大数据类型Clob的操作
- Hibernate实现Oracle Blob/Clob类型数据读写
- Spring+Hibernate中处理Oracle的大字段(clob二进制\blob大字符串)
- BLOB完全实践:在Oracle中存取BLOB对象实现文件的上传和下载(原创)
- Struts+Spring+Hibernate实现上传下载
- Hibernate+Spring彻底搞定Clob、Blob的存取
- Struts+Spring+Hibernate实现上传下载(一)
- oracle的CLOB和BLOB (jdbc实现对其操作示例代码)
- Struts+Spring+Hibernate实现上传下载
- Struts+Spring+Hibernate实现上传下载
- Struts+Spring+Hibernate实现上传下载
- Struts+Spring+Hibernate实现上传下载
- Hibernate+Spring彻底搞定Clob、Blob的存取
- 在Oracle中存取BLOB对象实现文件的上传和下载
- 在Oracle中存取BLOB对象实现文件的上传和下载
- Hibernate实现Clob和Blob对象的存取
- Hibernate实现Clob和Blob对象的存取
- Struts+Spring+Hibernate实现上传下载(二)
- Struts+Spring+Hibernate实现上传下载(MyEclipse版)
- 使用JAVA读取ORACLE BLOB字段实现上传下载