快速业务通道

Spring让LOB数据操作变得简单易行 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
t!");     }     ④ 以流的方式处理 LOB 字段     public void streamData(ResultSet rs) throws SQLException, IOException {      InputStream is = lobHandler.getBlobAsBinaryStream(rs, 1);      if (is != null) {       FileCopyUtils.copy(is, os);      }     }    }  ); }

通过扩展 AbstractLobStreamingResultSetExtractor 抽象类,在 streamData(ResultSet rs) 方法中以流的方式读取 LOB 字段数据,如 ④ 所示。这里我们又利用到了 Spring 的工具类 FileCopyUtils 将输入流的数据拷贝到输出流中。在 getAttach() 方法中通过入参 OutputStream os 接收 LOB 的数据,如 ① 所示。您可以同时覆盖抽象类中的 handleNoRowFound() 方法,定义未找到数据行时的处理逻辑。

Spring让LOB数据操作变得简单易行(6)

时间:2011-02-14 IBM 陈雄华

在 JPA 中操作 LOB 数据

在 JPA 中 LOB 类型的持久化更加简单,仅需要通过特殊的 LOB 注释(Annotation)就可以达到目的。我们对 Post 中的 LOB 属性类型进行注释:

清单 9. 注释 LOB 类型属性

package com.baobaotao.domain; … import javax.persistence.Basic; import javax.persistence.Lob; import javax.persistence. Column; @Entity(name = "T_POST") public class Post implements Serializable {  …  @Lob ①-1 表示该属性是 LOB 类型的字段  @Basic(fetch = FetchType.EAGER) ①-2 不采用延迟加载机制  @Column(name = "POST_TEXT", columnDefinition = "LONGTEXT NOT NULL") ①-3 对应字段类型  private String postText;  @Lob ②-1 表示该属性是 LOB 类型的字段  @Basic(fetch = FetchType. LAZY) ②-2 采用延迟加载机制  @Column(name = "POST_ATTACH", columnDefinition = "BLOB") ②-3 对应字段类型  private byte[] postAttach; … }

postText 属性对应 T_POST 表的 POST_TEXT 字段,该字段的类型是 LONTTEXT,并且非空。JPA 通过 @Lob 将属性标注为 LOB 类型,如 ①-1 和 ②-1 所示。通过 @Basic 指定 LOB 类型数据的获取策略,FetchType.EAGER 表示非延迟加载,而 FetchType.LAZY 表示延迟加载,如 ①-2 和 ②-2 所示。通过 @Column 的 columnDefinition 属性指定数据表对应的 LOB 字段类型,如 ①-3 和 ②-3 所示。

在 Hibernate 中操作 LOB 数据

提示

使用 Spring JDBC 时,我们除了可以按 byte[]、String 类型处理 LOB 数据外,还可以使用流的方式操作 LOB 数据,当 LOB 数据体积较大时,流操作是唯一可行的方式。可惜,Spring 并未提供以流方式操作 LOB 数据的 UserType(记得 Spring 开发组成员认为在实现上存在难度)。不过,www.atlassian.com 替 Spring 完成了这件难事,读者可以通过 这里 了解到这个满足要求的 BlobInputStream 类型。

Hibernate 为处理特殊数据类型字段定义了一个接口:org.hibernate.usertype.UserType。Spring 在 org.springframework.orm.hibernate3.support 包中为 BLOB 和 CLOB 类型提供了几个 UserType 的实现类。因此,我们可以在 Hibernate 的映射文件中直接使用这两个实现类轻松处理 LOB 类型的数据。

BlobByteArrayType:将 BLOB 数据映射为 byte[] 类型的属性;

BlobStringType:将 BLOB 数据映射为 String 类型的属性;

BlobSerializableType:将 BLOB 数据映射为 Serializable 类型的属性;

ClobStringType:将 CLOB 数据映射为 String 类型的属性;

下面我们使用 Spring 的 UserType 为 Post 配置 Hibernate 的映射文件,如 清单 10 所示:

清单 10 . LOB 数据映射配置

&

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号