문제

이 질문은 내가 가진 또 다른 질문과 관련이 있습니다. 일반적인 사용자 정의 컬렉션 인터페이스 및 Unity와 함께 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는 데이터 전송 개체 (DTO)를 구축하는 데 적합합니다. 위와 같은 것을 시도하면 이미 비즈니스 객체 접근 방식으로 이동할 수 있습니다. 이것은 Ibatis로 고통 스러울 수 있습니다. 현재 (잘 ... 이미 몇 달 동안, 시간 부족으로 인해) 나는 nhibernate를 대안으로 평가하고 있습니다. Nhibernate가 Ibatis보다 훨씬 더 매끄럽게 접근하는 비즈니스 객체를 처리한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top