ibatis+spring存储blob数据

来源:互联网 发布:穿衣搭配的软件 编辑:程序博客网 时间:2024/05/18 01:55
ibatis提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler 在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。
   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.就会出现上传的文件超出大小限制的异常。





 


原创粉丝点击