读书人

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

发布时间: 2012-08-27 21:21:56 作者: rapoo

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处理。

?

读书人网 >软件架构设计

热点推荐