DTOアノテーション改造記 その2

とりあえずできました。
DaoMetaDataとDaoMetaDataImplを触るだけで動きました。
DaoMetaDataは


public String DTO_SUFFIX="_DTO";
を追加。


DaoMetaDataImplは、


/**
* DTOアノテーションのクラス取得
* @param methodName
* @return
*/
protected Class getDtoClass(String methodName) {
String key = methodName + DTO_SUFFIX;
if (daoBeanDesc_.hasField(key)) {
Field queryField = daoBeanDesc_.getField(key);
return (Class) FieldUtil.get(queryField, null);
} else {
return null;
}
}
を追加し、createResultSetHandler内で、DTOアノテーションがある場合にResultSetHandlerを切り替えるということで対応。

if (List.class.isAssignableFrom(method.getReturnType())) {
//DTO用ResultSetHandler
Class dtoClass = getDtoClass(method.getName());
if(dtoClass == null){
return new BeanListMetaDataResultSetHandler(beanMetaData_);
}else{
return new BeanListResultSetHandler(dtoClass);
}
}else if (isBeanClassAssignable(method.getReturnType())) {

中略
//配列用に追加
} else if(dtoClass != null && Array.newInstance(dtoClass, 0).getClass()
.isAssignableFrom(method.getReturnType())){
//DTO用ResultSetHandler
return new BeanArrayResultSetHandler(dtoClass);
} else {
//DTO用ResultSetHandler
Class dtoClass = getDtoClass(method.getName());
if(dtoClass == null){
return new ObjectResultSetHandler();
}else{
return new BeanResultSetHandler(dtoClass);
}
}

内に切り替えロジックを挿入。


これでいいのかな?


追記
配列で戻すためには、Array用のResultSetHandlerを実装する必要あり。
BeanArrayResultSetHandlerでも後で作ってみます。



public class BeanArrayResultSetHandler extends BeanListResultSetHandler {

public BeanArrayResultSetHandler(Class beanClass) {
super(beanClass);
}


public Object handle(ResultSet rs) throws SQLException {
List list = (List) super.handle(rs);
return list.toArray((Object[])Array.newInstance(getBeanClass(),list.size()));
}
}


さらに追記
これいる人いるかな?
いるならパッチ作ってみますけど。


あんまり反応ないのー