Spring处理lob数据
在ssh项目中有一个需要上传、下载的功能,并且将图片信息存在数据库字段中,表的信息如下:
1.表service_domain_audit_change(oracle中)
字段类型
IDNUMBER(11)SERVICE_CODEVARCHAR2(100)DOMAIN_NAMEVARCHAR2(1000)AGENT_CODEVARCHAR2(100)NEW_ORGANIZE_NAME_CNVARCHAR2(200)NEW_USER_NAME_CNVARCHAR2(200)TRANSFER_DATETIMESTAMP(6)CHECK_DATETIMESTAMP(6)STATEVARCHAR2(10)CHECK_OPERATORVARCHAR2(200)EXT1VARCHAR2(2000)EXT2VARCHAR2(2000)EXT3VARCHAR2(2000)APPLY_TABLEBLOBOLD_ ORGANIZE_IDENTITYBLOBOLD_ USER _IDENTITYBLOBNEW_ ORGANIZE_IDENTITYBLOBNEW_ USER _IDENTITYBLOBOTHER_INFOSBLOB
IDbigint(11)SERVICE_CODEVARCHAR(100)DOMAIN_NAMEVARCHAR(1000)AGENT_CODEVARCHAR(100)NEW_ORGANIZE_NAME_CNVARCHAR(200)NEW_USER_NAME_CNVARCHAR(200)TRANSFER_DATETIMESTAMPCHECK_DATETIMESTAMPSTATEVARCHAR(10)CHECK_OPERATORVARCHAR(200)EXT1VARCHAR(2000)EXT2VARCHAR(2000)EXT3VARCHAR(2000)APPLY_TABLEMEDIUMBLOBOLD_ ORGANIZE_IDENTITYMEDIUMBLOBOLD_ USER _IDENTITYMEDIUMBLOBNEW_ ORGANIZE_IDENTITYMEDIUMBLOBNEW_ USER _IDENTITYMEDIUMBLOBOTHER_INFOSMEDIUMBLOB
<property name="applyTable" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="apply_table"></column></property><property name="oldOrganizeIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="OLD_ORGANIZE_IDENTITY"></column></property><property name="oldUserIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="OLD_USER_IDENTITY"></column></property><property name="newOrganizeIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="NEW_ORGANIZE_IDENTITY"></column></property><property name="newUserIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="NEW_USER_IDENTITY"></column></property><property name="otherInfos" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"><column name="OTHER_INFOS"></column></property>
<bean id="nativeJdbcExtractor" lazy-init="true" lazy-init="true" />
<!--设置 LOB 处理器--><bean id="lobHandler" lazy-init="true" /><bean id="domainAuditChangeDao" />
大家可能已经注意到 nativeJdbcExtractor 和 oracleLobHandler Bean 都设置为 lazy-init="true",这是因为 nativeJdbcExtractor 需要通过运行期的反射机制获取底层的 JDBC 对象,所以需要避免在 Spring 容器启动时就实例化这两个 Bean。LobHandler 需要访问本地 JDBC 对象,这一任务委托给 NativeJdbcExtractor Bean 来完成,因此我们在 ① 处为 LobHandler 注入了一个 nativeJdbcExtractor。最后,我们把 lobHandler Bean 注入到需要进行 LOB 数据访问操作的 PostJdbcDao 中,如 ② 所示。如果底层数据库是 DB2、SQL Server、MySQL 等非 Oracle 的其它数据库,则只要简单配置一个 DefaultLobHandler 就可以了.