반응형

상세조회와 리스트조희 시에 데이터 오브젝트는 Field는 동일하고 where 절만 다른 경우가 있다.

SQL 동일하게 넣어 <select> 를 해도 되겠지만,

 

유지보수 관점에선 의도와 달리 서로 쿼리가 달라지는 경우는 배드 케이스가 발생하면 안된다.

따라서 같은 쿼리를 공유하여 하나는 list로 조회가 가능하게 열어두고 하나는 상세조회용으로 사용한다면

조금 더 쿼리 관리가 용이해진다.

 

myBatis는 동일한 Query를 재활용하여 편리한 동적 태그인<sql> 태그를 지원한다.

 

<sql> 태그는 

<sql id="sqlTest">
 select rid as ridMbr
       ,create_date as createDate
       ,modify_date as modifyDate
       ,decrypt(mbr_nm, #{key}) as memberName
 from   member
</sql>

와 같이 정의할 수 한다.

변수 지정 셀렉터(#{변수명})와 동적쿼리(${변수명}) 를 <sql> 안에서 사용할 수 있다.

즉 일반 CRUD 태그와 동일하게 입력해주면 쿼리가 실행될 때 기존 CRUD와 동일하게 자동으로 변수할당하여 실행된다.

 

호출과 사용은 아래와 같이 하면 된다.

<!-- Object로 조회하는 경우 -->
<select id="selectMemberByRid"
        parameterType="com.example.member.dto.FindMemberRequestDTO"
        resultType="com.example.member.dto.FindMemberResponseDTO">

	<include refid="sqlSelectMember">
    
    WHERE rid = #{ridMbr}

</select>

<!-- List로 조회하는 경우 -->
<select id="selectMemberListByCellPhone"
        parameterType="com.example.member.dto.FindMemberListRequestDTO"
        resultType="com.example.member.dto.FindMemberListItemResponseDTO">

	${listSelector}

	<include refid="sqlSelectMember">
    
    WHERE cell_phone = decrypt(#{cellPhone}, #{key}) 

    ${pager}

</select>

 

반응형

WRITTEN BY
데르벨준

,