iBatis.NET 을 하다보면 sqlmap 을 정의하는것이 가장 중요한 작업중에 하나 입니다.
이때 sqlmap xml 에서 mapper 정의하고 파라메터 클래스 mapper 정의하고 result mapper 정의하고 ..
만일 vo 클래스 속성명이라도 고칠라고 하면 .. xml 뜯어서 mapper 정의 다시 고치고..
에러나면 찾기도 힘들것입니다.

별것 아니지만 간단하고 깔끔하게 sqlmap 을 정의할 수 있고 수정 공수도 줄일 수 있습니다.

1) resultMap 대신 resultClass를 사용합니다.

다음 예제를 참조

 <alias>
    <typeAlias alias="AttachFileVO" type="UBISC.DDF.Vo.AttachFileVO, AMOJEIND.DDF"/>
    <typeAlias alias="CommonCodeVO" type="UBISC.DDF.Vo.CommonCodeVO, AMOJEIND.DDF"/>
</alias>

<statement id="listCommonCode" resultClass="CommonCodeVO">
</statement>

2) 파라메터 클래스는 Dictionary 를 사용합니다.

파라메터 클래스를 모두 만들거나 ReusltMap 으로 정의한다면 참으로 비효율적일 것입니다.
결과에 비해 파라메터는 양도 많을 뿐더러 변화무쌍하기 때문이죠

 IDictionary<string,object> param = new Dictionary<string,object>();
param.Add("USER_ID", "honester");

Mapper.Instance().QueryForList<T>("listCommonCode", param);

"statement" 태그의   parameterClass 속성 값과 상관없이 Mapper는 파라메터에 따라 Generic 하게 처리됩니다.
즉, 만일 클래스를 정의했다 하더라고 dictiony 키값과 해당 vo 클래스의 속성명이 일치하면
쿼리에 그 값을 지정해 줄수 있습니다..
sqlmap 에 다음과 같이 정의되어 있더라도 무방합니다.

 <statement id="listCommonCode"  parameterClass="CommonCodeVO" resultClass="CommonCodeVO">
....
</statement>

3) 만일 리턴받는 VO 객체도 만들기 싫다면 resultClass 에 Dictionary를 사용합니다.

설마 "System.Collections.Generic.Dictionary"를 사용하지는 않겠죠?
다음을 참조

 <statement id="selectLoginUser" resultClass="System.Collections.Specialized.HybridDictionary">
....
</statement>

Posted by 철냄비짱
,