谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

次は戻り値の扱い

ラッパーを作ることで、引数の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にマッピングして返してやる。
いいじゃないですか、これで。