`

SSH对blob的支持

    博客分类:
  • SSH
阅读更多
刚刚解决一个图片存入数据库的问题,留个记录备查。

1、主要步骤
1.1配置hibernate:
1.1.1、配置hibernate的持久类文件中对应的字段为byte[]类型
1.1.2、配置hibernate的类映射文件中对应的字段type为 
     org.springframework.orm.hibernate3.support.BlobByteArrayType

1.2、配置spring:
1.2.1、配置nativeJdbcExtractor,如下:  
     <bean   id="nativeJdbcExtractor"                class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
1.2.2、配置oracleLobHandler
     <bean id="oracleLobHandler"   class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
         <property name="nativeJdbcExtractor">
             <ref bean="nativeJdbcExtractor" />
         </property>
    </bean>
1.2.3、把oracleLobHandler加入sessionFactory中:
     <property name="lobHandler">
         <ref bean="oracleLobHandler" />
     </property


2、源代码
2.1.1、table_test_image
create table TABLE_TEST_IMAGE
(
  ID  VARCHAR2(40),
  FID VARCHAR2(40),
  IMG BLOB
)


2.1.2、Image.java
package ie.search.test.model;

public class Image {
	private String id;
	private String fid;
	private byte[] img;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getFid() {
		return fid;
	}
	public void setFid(String fid) {
		this.fid = fid;
	}
	public byte[] getImg() {
		return img;
	}
	public void setImg(byte[] img) {
		this.img = img;
	}
}

2.1.3、Image.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="ie.search.test.model.Image" table="TABLE_TEST_IMAGE" >
        <id name="id" type="java.lang.String">
            <column name="ID" length="40" />
              <generator class="sequence"> 
                <param name="sequence">SEQ_TEST_IMAGE</param> 
              </generator>
        </id>
        
         <property name="fid" type="string">
            <column name="FID" length="40">
                <comment>外键</comment>
            </column>
        </property>
        
        <property name="img" type="org.springframework.orm.hibernate3.support.BlobByteArrayType">
            <column name="IMG" >
                <comment>图片</comment>
            </column>
        </property>
     
    </class>
</hibernate-mapping>

2.1.4、spring配置文件片段
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
	
	<!-- for Oracle9i ojdbc14.jar测试通过 -->
	<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
	<bean id="lobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler">
	        <property name="nativeJdbcExtractor">
	            <ref bean="nativeJdbcExtractor"/>
	        </property>
	</bean> 
	<!-- Oracle9i over -->
	
	<!-- for Oracle10g ojdbc14.jar测试通过-->
	<!--
	<bean id="lobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.DefaultLobHandler">
	</bean> 
	-->
	<!-- Oracle10g over -->
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />	
		<property name="lobHandler" ref="lobHandler"/>
		<property name="mappingDirectoryLocations">
			<list>
				<value>classpath*:ie/bsp/modules/commonquery/model/</value>
				<value>classpath*:ie/bsp/modules/reference/model/</value>
				<value>classpath*:ie/bsp/modules/commcomponent/model/</value>
				<value>classpath*:ie/bsp/modules/zone/model/</value>				
				<value>classpath*:ie/search/feature/featureTick/model/</value>
				<value>classpath*:ie/search/feature/featureMosquito/model/</value>
				<value>classpath*:ie/search/vector/tick/model/</value>
				<value>classpath*:ie/search/feature/featureMouse/model/</value>
				<value>classpath*:ie/search/feature/featureFlea/model/</value>
				<value>classpath*:ie/perm/model/</value>

				

				
			</list>
		</property>

		<property name="hibernateProperties">

			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
				<prop key="hibernate.cache.use_query_cache">true</prop>
				
			</props>
		</property>


	</bean>
	</beans>


2.1.5、存取图片的action代码段
public String saveImage(){
		FileInputStream fis=null;
		Image image=new Image();
		image.setFid("1");
		byte[] img=null;
		try {
			File f=new File("d:\\upload\\-1.jpg");
			fis=new FileInputStream(f);
			byte[] b=new byte[fis.available()];
			fis.read(b);
			fis.close();
			img=b;
			image.setImg(img);
			imageDao.save2(image);
		} catch (Exception e) {
			e.printStackTrace();
		}
		imageDao.save2(image);
		return "success";
	}

	public String readImage(){
		System.out.println(this.getClass()+".readImage()...");
		Image image=imageDao.get("21");
		FileOutputStream fos=null;
		try {
			fos=new FileOutputStream("d:\\upload\\target1.jpg");
			fos.write(image.getImg());
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "success";
	}


3、注意
<bean id="nativeJdbcExtractor"/>
用了c3p0连接池的情况下用: C3P0NativeJdbcExtractor
如果是dpcp连接池,则用:CommonsDbcpNativeJdbcExtractor
如果没有使用连接池,则用:SimpleNativeJdbcExtractor
其他的,用了jboss,weblogic连接池等等的情况,都有专门的Extractor对应。
分享到:
评论

相关推荐

    SSH示例代码(带事物和Blob操作的)

    这个示例代码提供了SSH整合的实践应用,包括事务管理和Blob对象的处理,适用于Oracle 9i数据库。 首先,Struts是MVC(模型-视图-控制器)设计模式的一个实现,用于构建Web应用程序的前端控制层。它负责接收HTTP请求...

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

    在Spring配置文件中,我们需要添加对Blob的支持。我们可以使用SimpleNativeJdbcExtractor作为JDBC抽取器,并使用OracleLobHandler来支持Oracle数据库。在SessionFactory配置中,我们需要添加OracleLobHandler支持。 ...

    Sequel Pro-Nightly,Mac最好用的mysql客户端,正版,支持mysql8, 支持blob内容直接显示

    总的来说,Sequel Pro-Nightly作为一款针对Mac用户的MySQL客户端,凭借其对MySQL 8.0的全面支持、直观的BLOB内容显示、友好的用户界面以及强大的功能集,成为了数据库管理的利器。无论你是开发者、数据库管理员还是...

    ssh上传下载文件到oracle

    总之,实现SSH框架上传文件到Oracle并从Oracle下载文件到本地,需要结合Spring的文件上传支持、Struts2的Action处理、Hibernate的ORM功能以及Oracle数据库的操作,确保各个组件协同工作,完成文件的存取操作。...

    使用SSH构建Web应用系统

    2. **文件上传**:SSH框架支持文件上传,通常通过Struts2的上传组件实现,需要注意文件大小限制和安全性。 3. **操作日志记录**:可以利用Spring的AOP或JDK的动态代理来实现插件式操作日志记录。 4. **权限控制**...

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

    - 在`img.jsp`文件中,通过`AblobDAO`和`AcmimgDAO`实现了对Blob类型的图片数据的读取和展示。 2. **分页显示**: - `index.jsp`文件通过传递参数`mpage`来实现图片的分页显示功能。 3. **属性设置**: - `...

    三个ssh框架

    Spring4是Spring框架的一个版本,提供了更好的性能和新特性,例如对Java 8的支持。Hibernate4相较于之前的版本,优化了查询性能,支持了更多的JPA标准,并引入了二进制大型对象(Blob/Clob)的处理。 “sshtest”...

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

    2. **Spring**:Spring 是一个全面的后端应用框架,它不仅支持依赖注入(DI)和面向切面编程(AOP),还提供了大量企业级服务,如事务管理、数据源管理等。在这个项目中,Spring被用来管理Bean的生命周期,通过配置...

    精心整理的ssh2 一些错误问题的记录(推荐)

    为了解决这个问题,需要在Spring配置文件中添加对LobHandler的支持。 ### 错误六:at java.util.Date.parse(Unknown Source) 这个错误发生在Java中解析日期字符串时。通常,原因是提供的日期字符串格式与`Date....

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

    在这个系统中,Hibernate可能被用来处理学生信息、成绩数据的CRUD(创建、读取、更新、删除)操作,同时支持学生照片的存储和检索。 4. **MySQL数据库**:作为后端存储,MySQL是一个快速、可靠且免费的开源关系...

    简单毕业选题系统-ssh框架连接Oracle

    它支持复杂的数据类型,如BLOB、CLOB、NCLOB等,还提供了丰富的数据库特性,如索引、分区、存储过程、触发器等。在SSH框架中,通过JDBC驱动或者Hibernate的Session接口,可以与Oracle数据库进行交互。 【Eclipse...

    SSH范例源码(李兴华)

    描述中的"分页"功能可能通过Hibernate的Criteria或HQL查询实现,而"上传"和"下载"功能则可能涉及到Hibernate对BLOB类型字段的支持。 在"sshDemo"这个压缩包中,你应该能找到以下组成部分: 1. **源代码**:包括Java...

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

    它支持复杂的数据类型,如BLOB、CLOB,以及高级的并发控制和数据安全特性。在SSH项目中,Oracle作为后端数据库,存储和管理应用程序的数据。 这个压缩包中的项目可能包含了以下部分: - src目录:包含项目的源代码...

    ssh文件上传

    在文件上传过程中,如果需要将文件存储到数据库,Hibernate可以帮助我们将文件数据转换为数据库中的BLOB类型字段。当然,这通常不建议,因为大文件存储在数据库中可能会导致性能问题。更常见的方式是将文件保存到...

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

     本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文选用的数据库为Oracle 9i,当然你可以在不...

    sftpgo:功能齐全且高度可配置的SFTP服务器,具有可选的FTPS和WebDAV支持-S3,Google云存储,Azure Blob

    支持多个存储后端:本地文件系统,加密的本地文件系统,S3(兼容)对象存储,Google云存储,Azure Blob存储,SFTP。产品特点SFTPGo使用存储在“数据提供程序”中的虚拟帐户。 支持SQLite,MySQL,PostgreSQL,bbolt...

    导出Excle.zip

    "导出Excle.zip"这个标题暗示我们关注的是一个用于前端Excel导出的压缩包,包含Blob.js和Export2Excel.js两个关键文件。这两个JavaScript库在实现Excel文件的创建和下载功能上起着重要作用。 首先,我们来看`Blob....

    Struts+Spring+Hibernate开发实例祥解

    SSH提供了强大的MVC(Model-View-Controller)设计模式支持,使得开发高效、可维护的Web应用变得更加便捷。本实例详细讲解了如何在SSH框架下实现文件的上传和下载功能。 **Struts框架**在文件上传中的作用主要体现...

Global site tag (gtag.js) - Google Analytics