質問

この質問は、私が持っている別の質問に関連しています:一般的なカスタムコレクションインターフェイスとUnityでiBATIS.NETを使用する

問題は、iBATIS.NETがインターフェイスではなく、カスタムコレクションの具体的なインスタンスである場合、カスタムコレクション(つまり、Barsのカスタムコレクションを持つQueryForObject(" Select_Foo"))のみを生成することです。これがiBATIS.NETの制限であるか、またはこれを行う方法があるかどうかは誰にもわかりますか?

ありがとう、

ポール

役に立ちましたか?

解決

あなたが正しく理解できたら、iBatisが何らかのオブジェクトにマッピングする方法を完全に制御したいと思います。

ITypeHandlerCallback を使用してこれを行うことができます。 。詳細については、 PDFドキュメントのセクション" 3.5.5。カスタムタイプハンドラー"。

DataTablesで同様のことをしました。実装は次のようになります。

class DataTableBuilder : ITypeHandlerCallback
{
    public object GetResult(IResultGetter getter)
    {
        IDataReader reader = getter.DataReader;

        // (A) define whatever type you want to

        // (B) read rows from DataReader and populate your type from (A)
        while (reader.Read())
        {
            // iterate over the columns of the current row
            for (int i = 0; i < reader.FieldCount; i++)
            {
               // populate your type from (A)
            }                    
        }
        return ...;   // return your type from (A)
    }

    // implement the other members of ITypeHandlerCallback
    // the implementation below actually worked for me
    public object NullValue { get { return null; } }
    public void SetParameter(IParameterSetter setter, object parameter) { }
    public object ValueOf(string s) { return s; }
}

最後の注意:iBatisは、データ転送オブジェクト(DTO)の構築に適しています。上記のようなものを試してみると、すでにビジネスオブジェクトアプローチに向かっている可能性があります。これはiBatisで苦痛になるかもしれません。現在(まあ...時間が不足しているため、すでに数か月間)私はNHibernateを代替として評価しています。 NHibernateはiBatisよりもはるかにスムーズにビジネスオブジェクトアプローチを処理していると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top