天天看點

詳解Ibatis寫CLOB資料

Ibatis是一個高效,友善,易于學習的資料通路元件,在性能上比hibernate高,學習難度也比hibernate和jdo要低,而且它比 直接使用jdbc友善和易于維護。是以Ibatis深入大家的喜愛,一些對性能有更高的要求的系統(如保險,金融行業系統),或改造遺留系統 時,Ibatis是資料通路元件的首選。

在使用Oracle資料庫時,讀取CLOB和BLOB等大類型的資料一直是個比較犯難的事,一般都是通過JDBC代碼來實作對CLOB和BLOB資料的讀寫,效果和性能都是最好的,但是代碼也相當複雜,且代碼難以重用。

公司的項目正好有這方面的需要,要求我給予解決。在網上找了一些方法,好多不能滿足需求,而且都是轉載,于是看了下ibatis包,發現ibatis裡面已經封裝了類,隻要直接使用即可。

有兩種方式實作:

1.通過配置ParameterMap和ResultMap來實作對LOB類型的讀寫

1.1 java代碼

假設java類中有個字元串屬性

  1. private String  detail; // 較長的描述 

1.2 sqlmap配置

  1. <parameterMap class="Description" id="DescriptionParam"> 
  2.        <parameter property="detail" javaType="java.lang.String" jdbcType="NCLOB"      typeHandler="com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback"/> 
  3.     <parameter property="id" javaType="java.lang.Long"/> 
  4.    parameterMap> 

注意:因為使用了ParameterMap作為輸入參數,在插入語句中用?号來代替屬性值(如:#detail#)

新增資料時配置

  1. <insert id="addDescription" parameterClass="Description" > 
  2.      insert into description  
  3.     (id,   
  4.      detail)  
  5.   values(#?#,#?#)  
  6.     ]]> 
  7.     <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre"> 
  8.          select SEQ_description_ID.NEXTVAL from DUAL  
  9.     selectKey> 
  10.   insert> 

更新資料時配置

  1. <update id="updateDescription" parameterClass="Description" > 
  2.      update description set tab_detail     = #?#  where id=#?#    
  3.  update> 

2. 通過parameterClass傳入參數(推薦)

2.1 java代碼

  1. private String  detail; // 較長的描述 

2.2 sqlmap配置

  1. <insert id="addDescription" parameterClass="Description" > 
  2.       insert into description (id, detail)  
  3.       values (#id#, #tabDetail,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#)  
  4.     ]]> 
  5.     <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre"> 
  6.          select SEQ_description_ID.NEXTVAL from DUAL  
  7.     selectKey> 
  8.   insert> 
  1. <update id="updateDescription" parameterClass="Description" > 
  2.     update description  
  3.     <dynamic prepend="set" > 
  4.       <isNotNull prepend="," property="detail" > 
  5.        tab_detail     = #detail,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#  
  6.       isNotNull> 
  7.    dynamic> 
  8.   where id=#id#    
  9. update> 

繼續閱讀