|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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(newCsvTarget
<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
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |