详解Ibatis写CLOB数据

开发 后端
Ibatis是一个高效,方便,易于学习的数据访问组件,在性能上比hibernate高,学习难度也比hibernate和jdo要低,而且它比直接使用jdbc方便和易于维护。

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.       
  3.      insert into description  
  4.     (id,   
  5.      detail)  
  6.   values(#?#,#?#)  
  7.     ]]> 
  8.     <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre"> 
  9.          select SEQ_description_ID.NEXTVAL from DUAL  
  10.     selectKey> 
  11.   insert> 

 

 

 

更新数据时配置

 

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

 

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

2.1 java代码

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

 

  1. private String  detail; // 详细描述 

2.2 sqlmap配置

新增数据时配置

 

  1. <insert id="addDescription" parameterClass="Description" > 
  2.       
  3.       insert into description (id, detail)  
  4.       values (#id#, #tabDetail,handler=com.ibatis.sqlmap.engine.type.ClobTypeHandlerCallback#)  
  5.     ]]> 
  6.     <selectKey resultClass="java.lang.Long" keyProperty="id" type="pre"> 
  7.          select SEQ_description_ID.NEXTVAL from DUAL  
  8.     selectKey> 
  9.   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.  
  10. update> 

 

 

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

【编辑推荐】

  1. Java持久层框架iBATIS 3(BETA 1)版本发布
  2. iBATIS配置类及操作类的浅析
  3. iBATIS参数理解浅析
  4. iBATIS模糊查询的实现实例浅析
  5. Hibernate与iBATIS的对比
责任编辑:金贺 来源: ITEYE博客
相关推荐

2009-07-15 16:42:03

iBATIS读写CLO

2009-07-15 17:01:29

iBATIS操作CLO

2009-07-15 16:26:04

iBATIS Clob

2009-07-15 11:43:13

<iterate>标签

2009-07-22 16:13:40

iBATIS用法SqlMapTempl

2009-07-21 17:06:35

iBATIS.NET执

2009-07-16 17:40:48

iBATIS高级查询iBATIS使用

2009-07-20 17:42:04

iBATIS入门

2009-07-21 14:57:41

iBatis中调用存储iBatis

2010-05-31 17:18:39

Cassandra数据

2017-09-05 09:18:54

OracleCLOB大数据

2009-07-21 11:12:00

iBATIS配置

2009-07-15 15:47:49

iBATIS是什么

2009-07-16 09:56:32

什么是iBATIS

2011-07-19 17:33:53

存储过程javaibatis

2009-07-20 09:51:19

iBATIS.net数据库缓存

2009-09-25 14:04:12

Hibernate读取

2009-11-19 10:43:54

Oracle Clob

2009-07-21 15:21:59

iBATIS.NET多

2009-07-15 17:58:07

iBATIS 动态映射
点赞
收藏

51CTO技术栈公众号