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类中有个字符串属性

      private String  detail; // 详细描述

   1.2 sqlmap配置

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

 

注意:因为使用了ParameterMap作为输入参数,在插入语句中用?号来代替属性值(如:#detail#) 
新增数据时配置

 <insert id="addDescription" parameterClass="Description" >
     <![CDATA[
     insert into description
    (id, 
     detail)
  values(#?#,#?#)
    ]]>
    <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre">
         select SEQ_description_ID.NEXTVAL from DUAL
    </selectKey>
  </insert>

 

   更新数据时配置

  <update id="updateDescription" parameterClass="Description" >
     update description set tab_detail     = #?#  where id=#?# 

 </update>

 

2. 通过parameterClass传入参数(推荐)

 

  2.1 java代码

       假设java类中有个字符串属性

      private String  detail; // 详细描述

   2.2 sqlmap配置

    新增数据时配置

   <insert id="addDescription" parameterClass="Description" >
     <![CDATA[
      insert into description (id, detail)
      values (#id#, #tabDetail,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#)
    ]]>
    <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre">
         select SEQ_description_ID.NEXTVAL from DUAL
    </selectKey>
  </insert>

 

   更新数据时配置

  <update id="updateDescription" parameterClass="Description" >
     update description
     <dynamic prepend="set" >
       <isNotNull prepend="," property="detail" >
        tab_detail     = #detail,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#
       </isNotNull>
    </dynamic>
   where id=#id# 

 </update>

  

 ibatis还存在很多的typeHandler,大家自己可以看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值