iBATIS操作Blob与Clob浅析

这几天仔细看了一下iBATIS的文档,发现2.2后,iBATIS的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和Clob数据的处理也就简单多了。
 
不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看iBATIS是如何支持Clob和blob的。

创新互联是专业的尼河口网站建设公司,尼河口接单;提供成都网站制作、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行尼河口网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

iBATIS提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler

在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。

BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的Blob

ClobStringTypeHandler 用于处理Clob类型数据,使用字符串来映射Clob

有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。

下面是一个简单的例子:

 
 
 
  1. public class Food { 
  2. private String content; 
  3. private String id; 
  4. private byte[] image; 
  5. private String name;   
  6.     ... 

xml如下:说明一下,在resultMap中可以通过typeHandler来指定具体的handler.在inline变量中,可以通过handler来定义相应的typeHandler

 
 
 
  1. ﹤sqlMap namespace="Food"﹥ 
  2.    
  3.    ﹤typeAlias alias="Food" type="org.esoft.hdb.bo.Food"/﹥ 
  4.    ﹤resultMap id="foodResult" class="Food"﹥ 
  5.   ﹤result property="id" column="C_ID"/﹥ 
  6.   ﹤result property="name" column="C_NAME"/﹥ 
  7.   ﹤result property="content" column="C_content" 
  8.  typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler"/﹥ 
  9.   ﹤result property="image" column="C_image" 
  10.  typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"/﹥ 
  11.    ﹤/resultMap﹥ 
  12.    ﹤sql id="foodFragment"﹥select C_ID,C_NAME,C_CONTENT,C_IMAGE from T_FOOD﹤/sql﹥ 
  13.   ﹤select id="getAll" resultMap="foodResult"﹥ 
  14.   ﹤include refid="foodFragment"/﹥ 
  15.    ﹤/select﹥ 
  16.    ﹤select id="selectById" parameterClass="string" resultMap="foodResult"﹥ 
  17.   ﹤include refid="foodFragment"/﹥ where C_ID=#id#﹤/select﹥ 
  18.    
  19.    ﹤insert id="insert" parameterClass="Food"﹥ insert into T_FOOD ( C_ID, 
  20.   C_NAME,C_CONTENT, C_IMAGE) values ( #id#, 
  21.   #name#,#content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#, 
  22.   #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#) 
  23.   ﹤/insert﹥ 
  24.    
  25.    ﹤update id="update" parameterClass="Food"﹥ update T_FOOD set C_NAME = #name#, 
  26.   C_CONTENT = 
  27.   #content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#, 
  28.   C_IMAGE = 
  29.   #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler# 
  30.   where C_ID = #id# ﹤/update﹥ 
  31.    
  32.    ﹤delete id="deleteById" parameterClass="string"﹥ delete from T_FOOD where C_ID = #id# 
  33.   ﹤/delete﹥ 
  34.    
  35. ﹤/sqlMap﹥ 
  36. public interface FoodService { 
  37.    
  38. void save(Food food); 
  39. Food get(String id); 
  40. /** 
  41. * @param food 
  42. */ 
  43. void update(Food food); 
  44. public class FoodServiceImpl implements FoodService { 
  45. private FoodDAO foodDAO; 
  46. private DaoCreator creator; 
  47. public void setCreator(DaoCreator creator) { 
  48.     this.creator = creator; 
  49. protected FoodDAO getFoodDAO() { 
  50.     if (foodDAO == null) { 
  51.    foodDAO = (FoodDAO) creator.createDao(FoodDAO.class, Food.class); 
  52.     } 
  53.     return foodDAO; 
  54. public Food get(String id) { 
  55.     return getFoodDAO().get(id); 
  56. public void save(Food food) { 
  57.     getFoodDAO().save(food); 
  58. public void update(Food food) { 
  59.     getFoodDAO().update(food); 
  60. spring xml 配置:
  61.  
  62. 。。。 
  63.  ﹤bean id="lobHandler" 
  64.   class="org.springframework.jdbc.support.lob.DefaultLobHandler"/﹥ 
  65.    
  66.    ﹤bean id="transactionManager" 
  67.   class="org.springframework.jdbc.datasource.DataSourceTransactionManager"﹥ 
  68.   ﹤property name="dataSource" ref="dataSource"/﹥ 
  69.    ﹤/bean﹥ 
  70.    
  71.    ﹤bean id="sqlMapClient" 
  72.   class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"﹥ 
  73.   ﹤property name="dataSource" ref="dataSource"/﹥ 
  74.   ﹤property name="configLocation"﹥ 
  75.  ﹤value﹥SqlMapConfig.xml﹤/value﹥ 
  76.   ﹤/property﹥ 
  77.   ﹤property name="lobHandler" ref="lobHandler"/﹥ 
  78.    ﹤/bean﹥ 
  79.    
  80.    ﹤bean id="daoCreate" class="org.esoft.hdb.ibatis.IbatisDaoCreator"﹥ 
  81.   ﹤property name="sqlMapClient" ref="sqlMapClient"/﹥ 
  82.    ﹤/bean﹥ 
  83.    
  84.    ﹤bean id="foodService" class="org.esoft.hdb.service.FoodServiceImpl"﹥ 
  85.   ﹤property name="creator" ref="daoCreate"/﹥ 
  86.    ﹤/bean﹥ 
  87.    
  88.    
  89.    ﹤aop:config﹥ 
  90.   ﹤aop:pointcut id="foodServiceMethods" 
  91.  expression="execution(* org.esoft.hdb.service.FoodService.*(..))"/﹥ 
  92.   ﹤aop:advisor advice-ref="txAdvice" pointcut-ref="foodServiceMethods"/﹥ 
  93.    ﹤/aop:config﹥ 
  94.    ﹤tx:advice id="txAdvice" transaction-manager="transactionManager"﹥ 
  95.   ﹤tx:attributes﹥ 
  96.  ﹤tx:method name="*" propagation="REQUIRED"/﹥ 
  97.   ﹤/tx:attributes﹥ 
  98.    ﹤/tx:advice﹥ 

简单的测试:

 
 
 
  1. save : 
  2.     Food food = new Food(); 
  3.     food.setPk("1"); 
  4.     food.setName("food1"); 
  5.     BufferedInputStream in = new BufferedInputStream(getClass() 
  6.   .getResourceAsStream("/1.gif")); 
  7.     byte[] b = FileCopyUtils.copyToByteArray(in); 
  8.     food.setImage(b); 
  9.   in = new BufferedInputStream(getClass().getResourceAsStream( 
  10.   "/hibernate.cfg.xml")); 
  11.     b = FileCopyUtils.copyToByteArray(in); 
  12.     food.setContent(new String(b)); 
  13.     foodService.save(food); 
  14. update: 
  15. Food food = foodService.get("1"); 
  16.     BufferedInputStream in = new BufferedInputStream(getClass() 
  17.   .getResourceAsStream("/jdbc.properties")); 
  18.     byte[] b = FileCopyUtils.copyToByteArray(in); 
  19.     food.setContent(new String(b)); 
  20.     foodService.update(food); 
  21.     food = foodService.get("1"); 
  22.     assertNotNull(food.getImage());

iBATIS操作Blob与Clob的情况就像你介绍到这里,希望对你有所帮助。

分享题目:iBATIS操作Blob与Clob浅析
本文URL:http://www.shufengxianlan.com/qtweb/news44/217144.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联