`
ME-XICAN
  • 浏览: 24608 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring+ibatis处理CLOB和BLOB

阅读更多

 

公司更改项目框架时,处理CLOB字段曾经出过一个问题。今天抽时间整理个大概出来。以下是老框架的配置。

Ibatis配置文件:

<sqlMapConfig>
	<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="false" maxRequests="6000" maxSessions="5000"
		maxTransactions="2000" useStatementNamespaces="true" />
	<typeHandler jdbcType="BLOB" javaType="[B"
		callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />
	<typeHandler jdbcType="CLOB" javaType="java.lang.String"
		callback="org.springframework.orm.ibatis.support.ClobStringTypeHandler" />
	<typeHandler jdbcType="DATETIME" javaType="java.util.Date"
		callback="com.**.ibatis.patch.typehandler.DateTimeTypeHandlerCallback" />

	<!-- generate start -->
maps_xml_generate
	<!-- generate end -->

</sqlMapConfig>
map映射文件中:
  <resultMap id="abatorgenerated_PayOrderInfoResultWithBLOBs" class="com.**.entity.PayOrderInfo" extends="PAY_ORDER_INFO.abatorgenerated_PayOrderInfoResult" >
    <!--
      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
    -->
    <result column="REQUEST_DATA" property="requestData" jdbcType="CLOB" />
  </resultMap>

 

spring配置文件:

 

	<!-- SqlMap setup for iBATIS Database Layer -->
	<bean id="sqlMapClient"
		class="com.**.ibatis.patch.spring.SqlMapClientFactoryBean">
		<property name="configLocations">
			<list>
				<value>classpath:/META-INF/sql-map-config.xml</value>
				<value>classpath:/META-INF/sql-map-config-front.xml</value>
			</list>
		</property>
		<property name="dataSource" ref="dataSource" />
		<property name="lobHandler" ref="lobHandler"></property>
		<property name="sqlExecutor" ref="sqlExecutor"></property>
	</bean>

	<!--Blob field hander for Oracle9i or Oracle10g -->
	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
		lazy-init="true" />
	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"
		lazy-init="true">
		<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
	</bean>

 看过一些介绍,说的是OracleLobHandler能处理oracle9i及其以上版本的CLOB字段。但是在新框架中同样的配置,查询时没有问题,插入CLOB字段时却失败,这里由于是很久前出的问题,没有错误日志可贴。后来解决办法如下:

	<!--Blob field hander for Oracle9i or Oracle10g -->
	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
		lazy-init="true" />
	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"
		lazy-init="true">
                <!--这里去掉了nativeJdbcExtractor转换器-->
		<!-- <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" /> -->
	</bean>

 

这样就解决了blob和clob字段的插入问题。但是对于为什么不能用OracleLobHandler并没有找到原因。最后总结可能是Spring版本问题(新框架版本为4.0.3,老框架2.5.5),但是目前为止没有找到相关说明。这里注意必须在事务下操作clob字段。原因不明。。

springAPI文档中DefaultLobHandler介绍为:This does not apply to Oracle 9i, and only to a limited degree to Oracle 10g!

OracleLobHandler介绍为:Note that this LobHandler requires Oracle JDBC driver 9i or higher!

Spring内置提供的NativeJdbcExtractor转换器有:
          C3P0NativeJdbcExtractor
          CommonsDbcpNativeJdbcExtractor
          JBossNativeJdbcExtractor
          NativeJdbcExtractor
          NativeJdbcExtractorAdapter
          SimpleNativeJdbcExtractor
          WebLogicNativeJdbcExtractor
          WebSphereNativeJdbcExtractor
          XAPoolNativeJdbcExtractor

 

 

0
1
分享到:
评论

相关推荐

    spring oracle blob

    为了更好地管理事务和处理大对象(LOBs),还需要在Spring的配置文件中进行相关的配置。以下是一个配置示例: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    springmvc-ibatis环境搭建

    springmvc ibatis 整合, 解决BLOB,CLOB等大字段的问题,内置查询缓存 和解决SpringMVC 返回JSON下载,乱码等问题 内部并没有实际的项目,只是一个搭建好的环境,方便较少大家时间, 并提供了一个DEMO ,紧为不了解...

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    Oracle数据库的基础使用

    开发框架如SSH(Struts+Spring+Hibernate)和SSI(SpringMVC+Spring+IBatis)经常与Oracle配合使用。 配置监听器是Oracle数据库管理的重要环节,监听器文件(如Oracle.Listener和OracleService)负责处理客户端连接...

    使用SSH构建Web应用系统

    这是因为字符串格式更便于比较和处理,尤其是在跨数据库平台时。 2. **密码字段**:密码通常存储为不可逆的哈希值,通常长度为32位。这样可以确保即使数据库泄露,原始密码也无法被还原,从而保护用户隐私。 3. **...

    oracle基础练习.docx

    Oracle提供多种数据类型,如CHAR、VARCHAR2、NUMBER、DATE以及LOB(包括BLOB和CLOB)。日期格式可以使用TO_DATE函数转换,例如`to_date('2016-6-1','yyyy-MM-dd')`,或者直接使用DATE'2016-6-1'。 分析函数如RANK()...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

Global site tag (gtag.js) - Google Analytics