次は戻り値の扱い
ラッパーを作ることで、引数のDTO(STRUCT)、配列(ARRAY)には対応ができた。
次は、戻り値の変換をどうするか。
ストアドプロシージャのreturnやOUTパラメータにSTRUCTやARRAYが入っていると、
Daoの戻り値にも、oracle.sql.STRUCT型や、oracle.sql.ARRAY型のオブジェクトが入ってくる。
これを、そのままにして、Logic側でうまく処理しろというのは、ちょっと酷。
STRUCTだったらDTOに変換してあげたいんだけど、
問題は、どのDTOに変換すべきか、(S2Daoには)分からない、ということ。
今のS2Daoのストアド呼び出しは戻り値がMapになっているせいで、
何でも入るんだけど、逆に言うと、何を入れれば良いか分からない。
その対策方法の候補は下の二つ。
- STRUCTの型名と、Dtoの型名の命名規則を決めておいて、規則通りのコンポーネント定義をS2コンテナから取得する。
- Daoメソッドの戻り値をMapだけではなく、Dtoも許可する。Dtoだった場合、Dtoに定義された型に変換して返す。
前者は、まぁ必要に応じてやるとして、
自分としてやりたいのは後者。
こんなDTOを作って、、、
public class XxxDto { private String returnValue; private Xxx xx; private List xxxArray; }
Dao側での呼び出しを、こんな風にする。
public String getXxx_PROCEDURE = "xxx"; public XxxDto getXxx(Integer id1, String name1, Integer id2, String name2);
これで、戻り値をXxxDtoにマッピングして返してやる。
いいじゃないですか、これで。