思诚科技 seecen LOGO
咨询热线:0791-87557233
 您现在的位置:  首页 > Java框架 

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

来源:网络    更新时间:2014-12-16


  本文讲解了在Spring中处理LOB数据的原理和方法,对于SpringJDBC以及Spring所集成的第三方ORM框架(包括JPA、Hibernate和iBatis)如何处理LOB数据进行了阐述。  概述

  LOB代表大对象数据,包括BLOB和CLOB两种类型,前者用于存储大块的二进制数据,如图片数据,视频数据等,而后者用于存储长文本数据,如论坛的帖子内容,产品的详细描述等。值得注意的是:在不同的数据库中,大对象对应的字段类型是不尽相同的,如DB2对应BLOB/CLOB,MySQL对应BLOB/LONGTEXT,SqlServer对应IMAGE/TEXT。需要指出的是,有些数据库的大对象类型可以象简单类型一样访问,如MySql的LONGTEXT的操作方式和VARCHAR类型一样。在一般情况下,LOB类型数据的访问方式不同于其它简单类型的数据,我们经常会以流的方式操作LOB类型的数据。此外,LOB类型数据的访问不是线程安全的,需要为其单独分配相应的数据库资源,并在操作完成后释放资源。最后,Oracle9i非常有个性地采用非JDBC标准的API操作LOB数据。所有这些情况给编写操作LOB类型数据的程序带来挑战,Spring在org.springFramework.jdbc.support.lob包中为我们提供了相应的帮助类,以便我们轻松应对这头拦路虎。

  Spring大大降低了我们处理LOB数据的难度。首先,Spring提供了NativeJdbcExtractor接口,您可以在不同环境里选择相应的实现类从数据源中获取本地JDBC对象;其次,Spring通过LobCreator接口取消了不同数据厂商操作LOB数据的差别,并提供了创建LobCreator的LobHandler接口,您只要根据底层数据库类型选择合适的LobHandler进行配置即可。

  本文将详细地讲述通过SpringJDBC插入和访问LOB数据的具体过程。不管是以块的方式还是以流的方式,您都可以通过LobCreator和LobHandler方便地访问LOB数据。对于ORM框架来说,JPA拥有自身处理LOB数据的配置类型,Spring为Hibernate和iBatis分别提供了LOB数据类型的配置类,您仅需要使用这些类进行简单的配置就可以像普通类型一样操作LOB类型数据。

  本地JDBC对象

  当您在Web应用服务器或Spring中配置数据源时,从数据源中返回的数据连接对象是本地JDBC对象(如DB2Connection、OracleConnection)的代理类,这是因为数据源需要改变数据连接一些原有的行为以便对其进行控制:如调用Connection#close()方法时,将数据连接返回到连接池中而非将其真的关闭。

  在访问LOB数据时,根据数据库厂商的不同,可能需要使用被代理前的本地JDBC对象(如DB2Connection或DB2ResultSet)特有的API。为了从数据源中获取本地JDBC对象,Spring定义了org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor接口并提供了相应的实现类。NativeJdbcExtractor定义了从数据源中抽取本地JDBC对象的若干方法:

方法说明ConnectiongetNativeConnection(Connectioncon)获取本地Connection对象ConnectiongetNativeConnectionFromStatement(Statementstmt)获取本地Statement对象PreparedStatementgetNativePreparedStatement(PreparedStatementps)获取本地PreparedStatement对象ResultSetgetNativeResultSet(ResultSetrs)获取本地ResultSet对象CallableStatementgetNativeCallableStatement(CallableStatementcs)获取本地CallableStatement对象
  有些简单的数据源仅对Connection对象进行代理,这时可以直接使用SimpleNativeJdbcExtractor实现类。但有些数据源(如JakartaCommonsDBCP)会对所有的JDBC对象进行代理,这时,就需要根据具体的情况选择适合的抽取器实现类了。下表列出了不同数据源本地JDBC对象抽取器的实现类:

数据源类型说明WebSphere4及以上版本的数据源org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractorWebLogic6.1 及以上版本的数据源org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractorJBoss3.2.4及以上版本的数据源org.springframework.jdbc.support.nativejdbc.JBossNativeJdbcExtractorC3P0数据源org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractorDBCP数据源org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractorObjectWeb的XAPool数据源org.springframework.jdbc.support.nativejdbc.XAPoolNativeJdbcExtractor

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2020