Pergunta

Esta pergunta está em relação a outra pergunta que tenho: Usando ibatis.net com interfaces e unidades de coleta personalizadas genéricas

O problema parece ser que o ibatis.net apenas preencherá uma coleção personalizada (ou seja, QueryForObject ("Select_foo"), que possui uma coleção personalizada de barras) se for uma instância concreta da coleção personalizada, não uma interface. Alguém sabe se isso é uma limitação do ibatis.net ou se existe uma maneira de fazer isso?

Obrigado,

Paulo

Foi útil?

Solução

Se eu te entendi bem, você gostaria de obter controle total sobre como os mapas ibatis em algum objeto.

Você pode fazer isso com o ItypeHandlerCallback. Dê uma olhada em uma descrição completa no Documentação em PDF na seção "3.5.5. Manipuladores de tipo personalizado".

Eu fiz algo semelhante com Datatables. Sua implementação pode parecer semelhante a isso:

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; }
}

Uma última nota: o IBATIS é bom para a construção de objetos de transferência de dados (DTOs). Se você tentar algo como acima, já poderá se mover em direção a uma abordagem de objeto de negócios. Isso pode ficar doloroso com ibatis. Atualmente (bem ... por alguns meses já, devido à falta de tempo), estou avaliando o Nibernate como uma alternativa. Eu acho que o Nibernate está lidando com o objeto de negócios se aproxima muito mais suavemente do que o ibatis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top