|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjp.terasoluna.fw.ex.unit.io.impl.AbstractInputSource<T>
jp.terasoluna.fw.ex.unit.io.impl.DbSource<T>
public class DbSource<T>
DBから入力ソースオブジェクトを生成します。
コンストラクタまたはsetterにて以下のパラメータを指定します。またAbstractInputSource
で設定可能なパラメータも指定できます。
| パラメータ名 | 説明 | 設定箇所 | 必須 |
|---|---|---|---|
| jdbcTemplate | JdbcTemplateオブジェクト。DataSource オブジェクトが設定されている必要があります。 |
コンストラクタ | ○ |
| clazz | ResultSetからマッピングするBeanのクラス |
コンストラクタ | ○ |
| sql | マッピングしたい行データを取得するためのSQL。明示的に指定しない場合は 「select * from テーブル名」が実行されます。 | コンストラクタ or setter | rowMapperを指定する場合は○ |
| tableName | マッピングしたい行データを取得する対象のテーブル名。デフォルトではマッピング対象クラスから
Class.getSimpleName()で取得します。 |
コンストラクタ or setter | |
| rowMapper | SQL実行結果の各ResultSetからオブジェクトをマッピングするためのRowMapper
オブジェクト。デフォルトではBeanPropertyRowMapper
を使用します(要Spring2.5以上)。 |
コンストラクタ | |
| isConvertDate | マッピングするオブジェクトのjava.util.Date型フィールドに対して、java.util. Date拡張型(java.sql.Timestamp、java.sql.Date、java.sql.Time )がマッピングされた場合にjava.util.Date型に戻す処理を行うかどうかのフラグ。 Boolean.TRUEまたはnullの場合は、マッピングするクラスのjava.util.Date型フィールドにマッピングされた java.util.Date型拡張クラスのオブジェクトを、 java.util.Date型に変換してフィールドに設定し直します。デフォルトはnullです 。変換が不要の場合はBoolean.FALSEを設定してください。(「■ 留意事項」参照) | setter |
以下の例にて使用法を説明します。
DB上のpersonテーブルの内容を以下とします。
ID,NAME,ADDRESS
1,田中,東京
2,鈴木,大阪
3,山田,神奈川
4,山本,福岡
これに対してマッピングするクラスを以下とします。
public class Person {
private Integer id;
private Sring name;
private String address;
// setter/getterは略
}
【データ比較機能】
業務処理の結果としてPersonクラスのリストが作成される際に、このPersonテーブルの内容が期待値となる場合、次のように比較することができます。
// DBから入力ソースを作成する
DbSource<Person> source = new DbSource<Person>(jdbcTemplate, Person.class);
// 業務処理の結果
List<Person> result = ...;
// 業務処理の結果とテーブルの内容を比較する
AssertUtils.assertInputEquals(source, result);
【データ保存機能】
// DBに格納されていた試験データをcsvファイルに保存します
source.to(new CsvTarget<Person>("person.csv", Person.class));
※↑の例でデータを取得するSQLを変更したい場合、次のようにsetterにて設定できます
source.setSql("SELECT id, name FROM person ORDER BY name");
■ 留意事項
本クラスではDBへの問い合わせ結果をオブジェクトにマッピングするためにRowMapperを使用しますが、
デフォルトではRowMapperの仕様によらず、マッピングするクラスのjava.util.Date型フィールドにマッピングされた
java.util.Date型拡張クラス(java.sql.Timestamp、java.sql.Date、java.sql.Time)のオブジェクトを、java.util.Date型に変換してフィールドに設定し直します。
すなわちRowMapperでjava.util.Date型のフィールドに対して、
ResultSet.getTimestamp(int)の結果を設定した場合等は、変換処理により
設定されたjava.sql.Timestampオブジェクトからjava.util.Dateオブジェクトを作成して
設定し直します。
(本クラスのデフォルトRowMapperであるBeanPropertyRowMapperは
java.util.Dateフィールドに対してjava.sql.Timestampオブジェクトを設定する仕様となっています。)
AbstractInputSource.compare(jp.terasoluna.fw.ex.unit.io.InputSource)によるオブジェクト同士の比較処理において、
型が違う場合に不一致と判断されるための処理です。
iBatisではjava.util.Date型のフィールドへのデータのマッピングの際に、java.sql.Timestampからjava.util.Dateに変換するため、
この処理に合わせています。
この変換処理によって問題になるのは、
本クラスが取得するオブジェクトと比較対象のオブジェクト(試験対象処理の結果得られるオブジェクト)のjava.util.Dateフィールドに
対して意図的にjava.sql.Timestampオブジェクトが設定されている場合や、そのような仕様のORマッパーを使用している場合です。
この場合、変換処理を行わずにRowMapperの仕様通りの結果を得るためにsetIsConvertDate(Boolean)でBoolean.FALSEを設定してください。
試験対象処理内容とRowMapperの実装内容について以下のパターンについて対応方法を説明します。
| RowMapperが設定するjava.util.Dateフィールドへの値 | |||
|---|---|---|---|
| 試験対象処理中で設定するjava.util.Dateフィールドへの値 | java.util.Dateオブジェクトを設定 | java.sql.Timestampオブジェクトを設定 | |
| java.util.Dateオブジェクトを設定 | パターンA | パターンB | |
| java.sql.Timestampオブジェクトを設定 | パターンC | パターンD | |
setIsConvertDate(Boolean)でBoolean.FALSEを設定した方が単体テストの性能は良くなります。BeanPropertyRowMapper(デフォルト)を使用している場合はこのパターンです。setIsConvertDate(Boolean)でBoolean.FALSEを設定してください。試験対象処理内で返却するオブジェクトのjava.util.Dateフィールドにjava.sql.Timestampオブジェクトを設定し、RowMapperにBeanPropertyRowMapper(デフォルト)を使用している場合はこのパターンです。
| フィールドの概要 | |
|---|---|
protected Class<T> |
clazz
|
protected org.springframework.jdbc.core.RowMapper |
rowMapper
|
protected String |
sql
|
protected org.springframework.jdbc.core.JdbcTemplate |
template
|
| クラス jp.terasoluna.fw.ex.unit.io.impl.AbstractInputSource から継承されたフィールド |
|---|
equalStrategy, header, headerMap |
| コンストラクタの概要 | |
|---|---|
DbSource(org.springframework.jdbc.core.JdbcTemplate template,
Class<T> clazz)
コンストラクタ |
|
DbSource(org.springframework.jdbc.core.JdbcTemplate template,
Class<T> clazz,
String sql,
org.springframework.jdbc.core.RowMapper rowMapper)
コンストラクタ |
|
DbSource(org.springframework.jdbc.core.JdbcTemplate template,
String tableName,
Class<T> clazz)
コンストラクタ。 |
|
| メソッドの概要 | |
|---|---|
Iterator<T> |
getIterator()
DB問い合わせ結果をイテレータで返却します。 |
void |
setIsConvertDate(Boolean isConvertDate)
マッピングするオブジェクトのjava.util.Date型フィールドに対して、java.util. |
void |
setSql(String sql)
マッピングしたい行データを取得するためのSQLを設定します。 |
| クラス jp.terasoluna.fw.ex.unit.io.impl.AbstractInputSource から継承されたメソッド |
|---|
compare, getEqualStrategy, getHeader, getHeaderMap, setEqualStrategy, setHeader, setHeaderMap, to |
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| フィールドの詳細 |
|---|
protected final org.springframework.jdbc.core.JdbcTemplate template
protected final Class<T> clazz
protected final org.springframework.jdbc.core.RowMapper rowMapper
protected String sql
| コンストラクタの詳細 |
|---|
public DbSource(org.springframework.jdbc.core.JdbcTemplate template,
String tableName,
Class<T> clazz)
RowMapperにBeanPropertyRowMapperを使用します。
template - JDBCテンプレートtableName - マッピングしたい行データを取得する対象のテーブル名clazz - 行データをマッピングするクラス
public DbSource(org.springframework.jdbc.core.JdbcTemplate template,
Class<T> clazz)
template - JDBCテンプレートclazz - 行データをマッピングするクラス
public DbSource(org.springframework.jdbc.core.JdbcTemplate template,
Class<T> clazz,
String sql,
org.springframework.jdbc.core.RowMapper rowMapper)
template - JDBCテンプレートclazz - 行データをマッピングするクラスsql - マッピングしたい行データを取得するためのSQLrowMapper - SQL実行結果の各ResultSetからオブジェクトをマッピングするためのRowMapper
オブジェクト| メソッドの詳細 |
|---|
public void setIsConvertDate(Boolean isConvertDate)
isConvertDate - マッピングするオブジェクトのjava.util.Date型フィールドに対して、java.util.
Date拡張型(java.sql.Timestamp、java.sql.Date、java.sql.Time
)がマッピングされた場合にjava.util.Date型に戻す処理を行うかどうかのフラグ
(Boolean.FALSEの場合は変換しません 。Boolean.TRUEまたはnullの場合は変換します。)public Iterator<T> getIterator()
sqlとrowMapperからJdbcTemplate.query(String, RowMapper)を実行し、 その結果をイテレータで返却します。 (すべての行データがメモリ上に展開されてからイテレータを作成する点に注意してください。)DbSourceの「■ 留意事項」を参照してください。
public void setSql(String sql)
sql - マッピングしたい行データを取得するためのSQL
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||