ibatis提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler 在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。
BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的blob
ClobStringTypeHandler 用于处理clob类型数据,使用字符串来映射Clob
有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。
注:必须要加入事务环绕才能使用
2)在ibatis配置文件sqlmap-config.xml中加入
<typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />
3)#PICDATA:BLOB# 指定自定义类型
BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的blob
ClobStringTypeHandler 用于处理clob类型数据,使用字符串来映射Clob
有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。
1。在spring的配置文件applicationContext.xml中配置
<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 local="nativeJdbcExtractor"/>
</property>
</bean>
<!-- Spring iBatis SqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler">
<ref local="oracleLobHandler"/>
</property>
</bean>
<!-- 事务管理器 -->
<bean id="ibatisTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务拦截器 -->
<tx:advice id="txAdvice" transaction-manager="ibatisTransactionManager">
<tx:attributes>
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="interceptorPointCuts"
expression="execution(public * com.junze.huiju.*.bo..*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="interceptorPointCuts" />
</aop:config>
注:必须要加入事务环绕才能使用
2)在ibatis配置文件sqlmap-config.xml中加入
<typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />
3)#PICDATA:BLOB# 指定自定义类型
<insert id="create" parameterClass="com.junze.huiju.module.sms.info.SMSInfo">
<selectKey resultClass="int" keyProperty="ID" >
select seq_m_sms.nextVal as value from dual
</selectKey>
insert into M_SMS(MLAT,MLON,PICDATA,PHONENUMBER,PHONENUMBERLIST,ID,PHONENAME,SMSDATA)
values (#MLAT:VARCHAR2#,#MLON:VARCHAR2#,#PICDATA:BLOB#,#PHONENUMBER:VARCHAR2#,#PHONENUMBERLIST:VARCHAR2#,#ID#,#PHONENAME:VARCHAR2#,#SMSDATA:VARCHAR2#)
</insert>
2.接下来就是vo类了,这个类也比较简单
public class Food {
private String content;
private String id;
private byte[] image;
private String name;
...
}
上面的只是提供参考,具体的类可根据需要自己写
3.取得文件的byte数组,赋值给image
这样子就OK了,但是如果你使用的是oracle的其他jdbc驱动而不是ojdbc14.jar.就会出现上传的文件超出大小限制的异常。