Если я вас правильно понял, вы бы хотели получить полный контроль над тем, как 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.