spring中如何處理oracle大字段

在spring中如何處理oracle大字段

在spring中採用OracleLobHandler來處理oracle大字段(包括clob和blob),則在程序中不需要引用oracle的特殊類,從而能夠保證支持我們的代碼支持多數據庫。

所以在Spring的主配置文件xx.xml中的配置SessionFactory的bean中配置:


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

<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true" autowire="default" dependency-check="default">
    <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
  </bean>

<bean id="sessionFactory" class="org.hibernate.cfg.SWSSessionFactoryBean" lazy-init="false" autowire="default" dependency-check="default">

  ...

 <property name="lobHandler">
      <ref bean="oracleLobHandler"/>
    </property>

  ...

</bean>


 

大家可能已經注意到 nativeJdbcExtractor和 lobHandler 都設置爲 lazy-init="true",
這是因爲 nativeJdbcExtractor需要通過運行期的反射機制獲取底層的 JDBC 對象,
所以需要避免在 Spring 容器啓動時就實例化這兩個 Bean。

<注:上面的SWSSessionFactoryBean是被重寫過的,繼承AnnotationSessionFactoryBean>

1、首先數據表中的clob類型對應java持久化類的String類型;而blob類型對應byte[]類型
2、1.定義hibernate標籤時,持久化類中對應clob類型的屬性的hibernate type應爲org.springframework.orm.hibernate.support.ClobStringType;而對應blob類型的屬性的hibernate type應爲org.springframework.orm.hibernate.support.BlobByteArrayType。

   2.如果通過spring 註解功能配置PoJo類時,在該大字段屬性的getXXX()方法前面加上註解:


public String xxx;

...

@Lob
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
@Column(length=10000)
public String getXXX ()
{
 return xxx;
}


 

註釋:
@Lob:大字段,lob包括blob和clob,其中clob用於純文本的,blob用於非文本的,比如圖片;
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType"):Oracle JDBC
      不允許流操作以批量方式執行,而Oracle CLOB採用流機制作爲數據讀寫方式,兩則衝突,
      所以用這個註解解決,可見spring對LOB有很好的支持,如果用到blob,可以把support後
      面的type改掉。當然也可以設置<prop key="hibernate.jdbc.batch_size">0</prop>,不過這個

方法比較不好,會影響效率,不推薦。
@Column(length=10000) :這個簡單,就是限制長度,最大值多少沒親自側過,理論上4G,但在
      NTFS文件系統或許不止4G,沒試過。
3、以後訪問這些對應clob和blob類型的屬性時,按普通屬性getorSet處理,不需要特別編碼。

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章