Если я вам прямо, то вы хотели бы получить полный контроль над тем, как, как Ibatis сопоставлена какой-то объект понятые.
Вы можете сделать это с помощью ITypeHandlerCallback. Посмотрите полное описание в разделе PDF documentation в разделе «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.