Beansクラスは、Commons BeanUtilsの
流れるようなインターフェース版です。
流れるようなインターフェースについては、
こちらをご覧ください
Beansクラスを使うには、S2-Tigerが必要です。
セットアップについては、こちらをご覧ください。
JavaBeansとJavaBeans、MapとJavaBeans、MapとMap間でプロパティをコピーするためには、
copy(Object src, Object dest) とexecute() を組み合わせます。
最初の引数がコピー元、二番目の引数がコピー先です。
SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).execute();
JavaBeansやMapを生成し、プロパティをコピーするためには、
createAndCopy(Class<T> destClass, Object src) とexecute() を組み合わせます。
最初の引数が生成するクラス、二番目の引数がコピー元です。
SrcBean src = new SrcBean();
...
DestBean dest = Beans.createAndCopy(DestBean.class, src).execute();
特定の型やプロパティに値を設定するときに、
変換が必要な場合は、
converter(Converter converter, CharSequence... propertyNames) を使います。
Converterは、下記のようなインターフェースです。
public interface Converter {
/**
* 値を文字列として返します。
*
* @param value
* 値
* @return 文字列としての値
*/
String getAsString(Object value);
/**
* 値をオブジェクトとして返します。
*
* @param value
* 値
* @return オブジェクトとしての値
*/
Object getAsObject(String value);
/**
* 対象の型かどうかを返します。 対象のプロパティを指定しない場合に呼び出されます。
*
* @param clazz
* @return
*/
boolean isTarget(Class clazz);
}
propertyNamesでプロパティが指定された場合は、そのプロパティがコンバータの対象になり、
プロパティが指定されない場合は、Converter#isTarget(プロパティの型)がtrueを返す
プロパティが対象になります。
標準のコンバータとして、org.seasar.framework.beans.converterに
DateConverter、SqlDateConverter、TimeConverter、TimestampConverter、
NumberConverterが用意されています。
どちらのコンバータもコンストラクタで、日付あるいは数値のパターンを指定します。
パターンの書式は、DateFormat、DecimalFormatのものを指定します。
dateConverter()、sqlDateConverter()、timeConverter()、timestampConverter()、
numberConverter()のショートカットも用意されています。
日付用のコンバータの指定は、
dateConverter(String pattern, CharSequence... propertyNames) を使います。
patternは、DateFormatのパターンを指定します。
SQL用の日付用のコンバータの指定は、
sqlDateConverter(String pattern, CharSequence... propertyNames) を使います。
patternは、DateFormatのパターンを指定します。
時間用のコンバータの指定は、
timeConverter(String pattern, CharSequence... propertyNames) を使います。
patternは、DateFormatのパターンを指定します。
日時用のコンバータの指定は、
timestampConverter(String pattern, CharSequence... propertyNames) を使います。
patternは、DateFormatのパターンを指定します。
数値用のコンバータの指定は、
numberConverter(String pattern, CharSequence... propertyNames) を使います。
patternは、DecimalFormatのパターンを指定します。
特定のプロパティだけを対象にするには、
includes(CharSequence... propertyNames) を使います。
SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).includes("foo", "bar").execute();
特定のプロパティだけを対象外にするには、
excludes(CharSequence... propertyNames) を使います。
includes()と同時に指定した場合は、includes()で指定されたプロパティから
excludes()で指定されているものが除かれます。
SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludes("foo", "bar").execute();
特定のプレフィックスのついたプロパティだけを対象にするには、
prefix(String prefix) を使います。
コピー先のプロパティ名からプレフィックスは取り除かれます。
public where_aaa;
...
BeanMap map = Beans.createAndCopy(BeanMap.class, this).prefix("where_").execute();
System.out.println(map.get("aaa"));
null値のプロパティを対象外にするには、
excludesNull() を使います。
SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludesNull().execute();
空白文字列のプロパティを対象外にするには、
excludesWhitespace() を使います。
SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludesWhitespace().execute();
department$nameのような'$'をデリミタにしたプロパティ名を持つJavaBeansをMapにコピーすると、
department.nameのような'.'をデリミタにしたプロパティ名に変換されます。
これは、S2JDBCのwhere()
で使うために用意されている機能です。
'$'と'.'は、それぞれbeanDelimiter(char beanDelimiter) と
mapDelimiter(char mapDelimiter) を使って変更することができます。
BeanMapは、HashMap<String, Object>なクラスで、
存在しないプロパティにアクセスすると例外を投げるようになっています。
|