IBatis框架的一些问题的扩展(五)
???????? 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" 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处理。
?