IBATIS 写BLOB字段遇到的问题

1、 首先遇到的配置问题,通过设置typeHandler 来支持写入。接下来由此引出了事务的问题。

<typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />

2、引入了typeHandler 之后,随之而来的是事务处理机制。

<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>

引入了这些。在配置事务的时候,从网上查了多种方式都不可行。最后判断可能与公司框架有关系。因为这个项目是在原先有一套数据源的基础上新增加了一套数据源。

3、那么我的目标是写入BLOB不考虑事务处理。我最终调整了typeHandler 终实现了。

<typeHandler jdbcType="BLOB" javaType="[B" callback="com.ibatis.sqlmap.engine.type.BlobTypeHandlerCallback" />

在这里使用了isEmpty 与 isNotEmpty 遇到一个问题是

java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 17

初步判断 是因为如果clob字段为空会导致数据项缺失。

<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>













猜你喜欢

转载自my.oschina.net/u/1863561/blog/2209096