public class BlobInputStreamTypeHandler
extends org.springframework.orm.ibatis.support.AbstractLobTypeHandler
OracleのBLOB型をストリームで扱う場合は本APIを使用する。(※本クラスはPostgreSQLでは利用できない)
BLOB列をバイト配列として扱う場合、本クラスを利用する必要はない。
BLOB列のサイズが大きく、メモリに全データを格納できない可能性がある場合は、本クラスを利用すること。
本クラスを利用するためにはOracleLobHandlerのBean定義とsqlMapClientFactoryBeanへの設定を行うこと。
また、OracleLobHandlerにはNativeJdbcExtractor実装クラスを設定すること。
なお、SpringがOracleLobHandlerといくつかのNativeJdbcExtractor実装クラスを提供している。
OracleLobHandlerは、
OracleのJDBCドライバのコネクション(oracle.jdbc.OracleConnectionインタフェース実装クラス)のAPIを使用して、
Lobのハンドリングを行う。
そのために、コネクションプールから取得したコネクション
(closeするとコネクションがプールに返るしくみが実装されている、コネクションのラッパ)から、
JDBCドライバのコネクションを取得する役割を果たすのが、NativeJdbcExtractor(Springのインタフェース)である。
JDBCドライバのコネクションの取得方法は
使用しているコネクションプールの実装によって異なるため、Springが様々なNativeJdbcExtractor実装クラスを提供している。
Springが提供している実装クラスの一つにSimpleNativeJdbcExtractorがある。
SimpleNativeJdbcExtractorは、簡単かつ、特定のコネクションプールを意識しない実装がされている。
ただし、SimpleNativeJdbcExtractorを利用しても、
commons-dbcp-1.3以降など、コネクションプールの実装によっては、JDBCコネクションを取得できない場合がある。
その場合、Springが提供している他のNativeJdbcExtractor実装クラスを使用するか、
各APサーバ用に新たにNativeJdbcExtractor実装クラスを作成する必要がある。
例えば、 commons-dbcp-1.3以降、あるいはそれを使用しているバージョンのTomcatの場合は、CommonsDbcpNativeJdbcExtractorを使用する。 APサーバがWebLogicの場合は、WebLogicNativeJdbcExtractorを使用する。 上記のNativeJdbcExtractor実装クラスは、どちらもSpringが提供している。
【Bean定義ファイル
の設定例】
<!-- LOBフィールドを扱うためのハンドラ -->
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor" ref="simpleExtractor"/>
</bean>
<!-- iBATIS データベース層のためのSQlMapの設定 -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="oracleLobHandler"/>
</bean>
<!-- simpleExtractorのBean定義設定 -->
<!-- ※ OC4JのJNDIからデータソースを取得する場合は、プロパティはすべてtrueにしておくこと。 -->
<bean id="simpleExtractor"
class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">
<property name="nativeConnectionNecessaryForNativeStatements" value="true"/>
<property name="nativeConnectionNecessaryForNativePreparedStatements" value="true"/>
<property name="nativeConnectionNecessaryForNativeCallableStatements" value="true"/>
</bean>
本クラスを利用したiBATIS設定ファイルの記述方法を以下に示す。
【BLOB_TESTテーブル定義】
列名 | 型 | 制約 |
---|---|---|
PK | INTEGER | NOT NULL |
MAP | BLOB | NOT NULL |
【iBATIS設定ファイル
の設定例】
<!-- update文の設定 -->
<parameterMap id="blobParam" class="java.util.Map">
<parameter property="pk"/>
<parameter property="map"
typeHandler="jp.terasoluna.fw.orm.ibatis.support.BlobInputStreamTypeHandler"/>
</parameterMap>
<insert id="insertBLobTest" parameterMap="blobParam">
INSERT INTO BLOB_TEST (PK, MAP) VALUES (?, ?)
</insert>
<!-- select文の設定 -->
<resultMap id="blobResult" class="java.util.HashMap">
<result property="pk"/>
<result property="map"
typeHandler="jp.terasoluna.fw.orm.ibatis.support.BlobInputStreamTypeHandler"/>
</resultMap>
<select id="selectBLobTest" resultMap="blobResult">
SELECT PK, MAP FROM BLOB_TEST
</select>
修飾子 | コンストラクタと説明 |
---|---|
|
BlobInputStreamTypeHandler()
コンストラクタ。
|
protected |
BlobInputStreamTypeHandler(org.springframework.jdbc.support.lob.LobHandler lobHandler)
コンストラクタ。
|
修飾子とタイプ | メソッドと説明 |
---|---|
protected Object |
getResultInternal(ResultSet rs,
int index,
org.springframework.jdbc.support.lob.LobHandler lobHandler)
結果を取得する。
|
protected void |
setParameterInternal(PreparedStatement ps,
int index,
Object value,
String jdbcType,
org.springframework.jdbc.support.lob.LobCreator lobCreator)
パラメータを設定する。
|
Object |
valueOf(String s)
文字列を本Handlerが扱う型に変換する。
|
public BlobInputStreamTypeHandler()
protected BlobInputStreamTypeHandler(org.springframework.jdbc.support.lob.LobHandler lobHandler)
lobHandler
- LobHandlerprotected void setParameterInternal(PreparedStatement ps, int index, Object value, String jdbcType, org.springframework.jdbc.support.lob.LobCreator lobCreator) throws SQLException
setParameterInternal
クラス内 org.springframework.orm.ibatis.support.AbstractLobTypeHandler
ps
- セット先のPreparedStatementindex
- パラメータのインデックスvalue
- セットするパラメータjdbcType
- パラメータのJDBC型lobCreator
- 利用するLobCreatorSQLException
- SQL例外protected Object getResultInternal(ResultSet rs, int index, org.springframework.jdbc.support.lob.LobHandler lobHandler) throws SQLException
getResultInternal
クラス内 org.springframework.orm.ibatis.support.AbstractLobTypeHandler
rs
- 取得元のResultSetindex
- ResultSetのインデックスlobHandler
- 利用するLobHandlerSQLException
- SQL例外Copyright © 2014. All Rights Reserved.