mybatis dot net mapper 조건문 활용

|
mybatis dot net 관련 레퍼런스 참조 http://ibatis.apache.org/docs/dotnet/datamapper/

mapper 작성시 xml을 사용 하게 되는데 mybatis 관련 인텔리센스가 작동하지 않을 것이다.
이에 대한 대처 방법은 mybatis dot net version을 다운 받아서 압축 해제시 안에 XML Schema file이 존재 할 것이다.
해당 file을 VS가 설치된 위치의 예를 들어 VS2010일 경우 "C:\Program Files\Microsoft Visual Studio 10.0\" 정도 될 것이다.
간단하게 VS_HOME이라 하겠다.
"VS_HOME\xml\Schemas\" 위치에 복사 해 준다.
그리고 VS를 실행 시킨후 인텔리센스가 작동하는지 확인한다.

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="dao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ibatis.apache.org/mapping">
    <alias>
        <typeAlias alias="rsltCarryIn" type="dao.model.vo.RsltCarryInVo"/>
    </alias>
    <resultMaps>
        <resultMap id="rsltCarryInMap" class="rsltCarryIn">
            <result property="SumValue" column="SUM_VALUE"/>
            <result property="BrandCode" column="BRAND_CODE"/>
        </resultMap>
    </resultMaps>
    <statements>
        <select id="getRsltCarryIn" resultMap="rsltCarryInMap" parameterClass="System.Collections.Hashtable">
            SELECT SUM(INTEG_VALUE)SUM_VALUE, BRAND_CODE FROM RSLT_STOCK
            <dynamic prepend="WHERE">
                <isNotEmpty prepend="AND" property="WorkDate">
                    WORK_DATE = #WorkDate#
                </isNotEmpty>
                <isNotEmpty prepend="AND" property="YardCode">
                    YARD_CODE = #YardCode# AND INTEG_VALUE > 0
                </isNotEmpty>
            </dynamic>
            GROUP BY BRAND_CODE
        </select>
    </statements>
</sqlMap>


위 예문은 동적 쿼리 생성 mapper이다.

dao에서 System.Collections.Hashtable type의 변수를 받아서 조건에 맞게 쿼리를 생성시켜 준다.

Hashtable의 key값이 property 명과 매치되고 그 값이 #propertyName#과 매칭 된다 보면 되겠다.


예문에서 isNotEmpty prepend="AND" property="WorkDate" 이런식으로 되어 있는데

파라메터의 WorkDate 값이 존재 할 경우 밑에 있는 WOKR_DATE = #WorkDate# 의 조건식을 추가 한다.

뭐 이런식이 될 것이다.


dynamic의 item으로 isNotEmpty 말고도 isNotNull 이라든지 여러가지가 존재 한다. 이 항목은 레퍼런스를 참조 하기 바란다.


그럼 dao의 C# Code를 한번 보겠다.


        public IList<RsltCarryInVo> getRsltCarryIn(string WorkDate, string YardCode)
        {
            Hashtable param = new Hashtable();
            param.Add("WorkDate", WorkDate);
            param.Add("YardCode", YardCode);
            IList<RsltCarryInVo> rtnVal = DaoFactory.getInstance.QueryForList<RsltCarryInVo>("getRsltCarryIn", param);
            return rtnVal;
        }


이 전에 포스팅 했던 코드와 유사 하다.

하나 추가된 것이 있다면 파라메터를 받을 수 있는 Hashtable을 추가 했다는거

key는 string이 되고 값은 object이다.

위에 mapper에서 사용한 property명과 key 값이 일치 하는걸 볼 수 있다.


대략 이런식으로 내용을 추가해서 사용하면 되겠다.

And