一、 首先遇到的配置问题,经过设置typeHandler 来支持写入。接下来由此引出了事务的问题。java
<typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />
二、引入了typeHandler 以后,随之而来的是事务处理机制。spring
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"/> <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"> <property name="nativeJdbcExtractor"> <ref bean="nativeJdbcExtractor"></ref> </property> </bean> <bean id="*SqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="epbpDataSource"/> </property> <property name="configLocation"> <value>classpath:config/*-iBatisConfig.xml</value> </property> <property name="lobHandler"> <ref local="oracleLobHandler"></ref> </property> </bean>
引入了这些。在配置事务的时候,从网上查了多种方式都不可行。最后判断可能与公司框架有关系。由于这个项目是在原先有一套数据源的基础上新增长了一套数据源。sql
三、那么个人目标是写入BLOB不考虑事务处理。我最终调整了typeHandler 终实现了。c#
<typeHandler jdbcType="BLOB" javaType="[B" callback="com.ibatis.sqlmap.engine.type.BlobTypeHandlerCallback" />
在这里使用了isEmpty 与 isNotEmpty 遇到一个问题是oracle
java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 17框架
初步判断 是由于若是clob字段为空会致使数据项缺失。spa
<insert id="#######" parameterClass="*"> INSERT INTO ****** (ID, XH, FJMC, FJSM, BLCDM, FJNR, CJR, CJSJ, XGR, XGSJ, SHR, SHRQ, SHZT, JGDM) VALUES(#id#, #xh#, #fjmc#, #fjsm#, #blcdm#, <isEmpty property="fjnr"> null, </isEmpty> <isNotEmpty property="fjnr"> #fjnr:BLOB#, </isNotEmpty> #cjr#, to_date(#cjsj#,'yyyy-mm-dd'), #xgr#, to_date(#xgsj#,'yyyy-mm-dd'), #shr#, to_date(#shrq#,'yyyy-mm-dd'), #shzt#, #jgdm#) </insert>