سؤال

هذا السؤال يتعلق بسؤال آخر لدي: باستخدام ibatis.net مع واجهات ووحدة مجموعة مخصصة عامة

يبدو أن المشكلة هي أن ibatis.net لن تملأ مجموعة مخصصة فقط (أي 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 على ما يرام لبناء كائنات نقل البيانات (DTOs). إذا جربت شيئًا مثل أعلاه ، فقد تتحرك بالفعل نحو نهج كائن العمل. قد يصبح هذا مؤلمًا مع Ibatis. حاليًا (حسنًا ... لبضعة أشهر بالفعل ، بسبب قلة الوقت) أقوم بتقييم nhibernate كبديل. أعتقد أن Nhibernate يتعامل مع كائن العمل بشكل أكثر سلاسة مما يفعله Ibatis.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top