Ibatis针对特殊数据类型的处理,实现必须继承TypeHandler类的接口,在一般的项目中的SqlMapConfig中进行配置。针对特殊的数据类型在数据库不支持的情况下进行回调处理。如Oracle中大数据类型Clob,Blob,Bfile等处理。
如果和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下.
在Spring和Ibatis(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的驱动,和通过配置parameterMap和resultMap能够轻松和完美的解决LOB大型数据的读写,无需要编写新的java来实现,也没有局限性。采用其他的驱动可能。
在Ibatis中不能用(+),但是在Oracle 8I 以下的版本是不支持join的,只能用(+);9I后才支持SQL92.针对字段部分字段的null处理。