Si je vous comprends bien, vous souhaitez obtenir un contrôle total sur la manière dont des cartes iBatis à un objet. Vous pouvez le faire avec le code ITypeHandlerCallback. Jetez un oeil à une description complète dans le PDF documentation dans la section "3.5.5 Handler Handlers".
J'ai fait quelque chose de similaire avec DataTables. Votre mise en œuvre pourrait ressembler à ceci:
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; }
}
Une dernière note: iBatis est très bien pour la construction d'objets de transfert de données (DTO). Si vous essayez quelque chose comme ci-dessus, vous pouvez déjà vous diriger vers une approche d'objet métier. Cela pourrait être douloureux avec iBatis. Actuellement (enfin ... depuis quelques mois, faute de temps) j'évalue NHibernate comme alternative. Je pense que NHibernate gère les approches des objets métier de manière beaucoup plus fluide qu'iBatis.