使用Hibernate/Spring簡化對Oracle中CLOB/BLOB的操作
曾經對Oracle中CLOB或BLOB存取的人,一定對它恨的牙癢癢的,光是要寫入一個BLOB,
就要先塞入一個EMPTYBLOB、再把資料讀出來,再將要寫入的二進位資料流。真的是相當的煩人。
自從用了Spring/Hibernate的Framework後,很多瑣碎的操作,都不需要自己寫程式處理,只要
專心做Biz Logic即可,尤其是像BLOB/CLOB的處理。
若要使用Spring/Hibernate來幫我們處理BLOB/CLOB的話,總共有三個步驟
一、修改Hibernate Mapping檔中,Blob/Clob的資料型態
二、修改POJO(Domain Entity)中,Blob/Clob的資料型態
三、在Spring的設定檔中,增加對Blob/Clob的物件。
詳細的設定如下:
一、修改Hibernate Mapping檔中,Blob/Clob的資料型態
將hbm.xml對應該欄位改成其對應的欄位
BLOB:org.springframework.orm.hibernate3.support.BlobByteArrayType
CLOB:org.springframework.orm.hibernate3.support.ClobStringType
二、修改POJO(Domain Entity)中,Blob/Clob的資料型態
POJO,代表BLOB的資料型態為byte[]
POJO,代表CLOB的資料型態為String
三、在Spring的設定檔中,增加對Blob/Clob的物件。
其中NativeJdbcExtractor,要依據不同的AP來設定,spring提供的有
C3P0NativeJdbcExtractor,
CommonsDbcpNativeJdbcExtractor,
JBossNativeJdbcExtractor,
SimpleNativeJdbcExtractor,
WebLogicNativeJdbcExtractor,
WebSphereNativeJdbcExtractor,
XAPoolNativeJdbcExtractor
這樣一來,就可以透過String來處理CLOB,byte[]來處理BLOB了。
就要先塞入一個EMPTYBLOB、再把資料讀出來,再將要寫入的二進位資料流。真的是相當的煩人。
自從用了Spring/Hibernate的Framework後,很多瑣碎的操作,都不需要自己寫程式處理,只要
專心做Biz Logic即可,尤其是像BLOB/CLOB的處理。
若要使用Spring/Hibernate來幫我們處理BLOB/CLOB的話,總共有三個步驟
一、修改Hibernate Mapping檔中,Blob/Clob的資料型態
二、修改POJO(Domain Entity)中,Blob/Clob的資料型態
三、在Spring的設定檔中,增加對Blob/Clob的物件。
詳細的設定如下:
一、修改Hibernate Mapping檔中,Blob/Clob的資料型態
將hbm.xml對應該欄位改成其對應的欄位
BLOB:org.springframework.orm.hibernate3.support.BlobByteArrayType
CLOB:org.springframework.orm.hibernate3.support.ClobStringType
<hibernate-mapping> <class name="OracleLob" table="LOB" schema="TEST" lazy="false"> … <property name="content" type="org.springframework.orm.hibernate3.support.ClobStringType" column="CLOB" /> <property name="file" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" lazy="true" column="FILE_CONTENT" not-null="true" /> … </class> </hibernate-mapping>
二、修改POJO(Domain Entity)中,Blob/Clob的資料型態
POJO,代表BLOB的資料型態為byte[]
POJO,代表CLOB的資料型態為String
public class OracleLob{ private byte[] file; private String content; }
三、在Spring的設定檔中,增加對Blob/Clob的物件。
<!-- Oracle BLOB/CLOB Handler --> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor" lazy-init="true"></bean> <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"> <property name="nativeJdbcExtractor"> <ref local="nativeJdbcExtractor" /> </property> </bean>
其中NativeJdbcExtractor,要依據不同的AP來設定,spring提供的有
C3P0NativeJdbcExtractor,
CommonsDbcpNativeJdbcExtractor,
JBossNativeJdbcExtractor,
SimpleNativeJdbcExtractor,
WebLogicNativeJdbcExtractor,
WebSphereNativeJdbcExtractor,
XAPoolNativeJdbcExtractor
這樣一來,就可以透過String來處理CLOB,byte[]來處理BLOB了。
留言