IBatis框架的一些有关问题的扩展(五)

IBatis框架的一些问题的扩展(五)

         Ibatis针对特殊数据类型的处理,实现必须继承TypeHandler类的接口,在一般的项目中的SqlMapConfig中进行配置。针对特殊的数据类型在数据库不支持的情况下进行回调处理。如Oracle中大数据类型ClobBlobBfile等处理。

 

如果和Spring整合可以采用Spring中针对大数据类型的处理。同时必须在配置文件配置。

项目中TrimTypeHandlerCallback用于处理字符串中去空格的方法的应用。

 

SqlMap-config.xml配置:

 

<typeHandler javaType="string"

callback="easyway.tbs.framework.app.ibatis.TrimTypeHandlerCallback"/>

同时需要在Spring 配置文件配置:

Spring内置提供的NativeJdbcExtractor转换器有

C3P0NativeJdbcExtractor

CommonsDbcpNativeJdbcExtractor

JBossNativeJdbcExtractor

NativeJdbcExtractor

NativeJdbcExtractorAdapter

SimpleNativeJdbcExtractor

WebLogicNativeJdbcExtractor

WebSphereNativeJdbcExtractor

XAPoolNativeJdbcExtractor

 

基本上够用了。位于org.springframework.jdbc.support.nativejdbc.

 

SpringIbatis(Hibenate)整合的项目中

<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"     lazy-init="true" />  

<!-- <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor" lazy-init="true" />-->     

<!-- LobHandler for Oracle JDBC drivers -->  

<!-- (refers to the NativeJdbcExtractor above to get access to native OracleConnections) -->  

 

<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">  

    <property name="nativeJdbcExtractor">  

        <ref local="nativeJdbcExtractor" />  

    </property>  

</bean> 

 

Ibatis项目中:

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

 

<typeHandler jdbcType="CLOB" javaType="java.lang.String"  

callback="org.springframework.orm.ibatis.support.ClobStringTypeHandler" /> 

 

 

据说在Ibatis2.2版本以后Ibatis对大数据类型的支持加强。

 

ibatis提供了TypeHandler接口用于处理数据类型基本的实现类为BaseTypeHandler

Spring提供了AbstractLobTypeHandler作为基础类并且提供了相应的模版方法所有的工作由LobHandler处理。

 

BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的blob。

 

ClobStringTypeHandler 用于处理clob类型数据,使用字符串来映射Clob。

 

有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。

 

详细使用请看:spring框架org.springframework.orm.ibatis.support

项目建议采用:

 

采用10g的驱动,和通过配置parameterMapresultMap能够轻松和完美的解决LOB大型数据的读写,无需要编写新的java来实现,也没有局限性。采用其他的驱动可能。

 

Ibatis中不能用(+),但是在Oracle 8I 以下的版本是不支持join,只能用(+);9I后才支持SQL92.针对字段部分字段的null处理。