[myBatis] sql 태그를 활용하여 오브젝트 조회와 리스트 조회 동시 처리 / 쿼리 재활용
Java & Spring/iBatis & myBatis 2019. 6. 3. 13:37반응형
상세조회와 리스트조희 시에 데이터 오브젝트는 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>
반응형
'Java & Spring > iBatis & myBatis' 카테고리의 다른 글
[ibatis ] boolean 값 isEqual 조회가 안될 때 확인해야하는 것 (1) | 2019.05.07 |
---|---|
myBatis CLOB 값 저장 (0) | 2019.01.29 |
[iBatis] 동적 select와 시 문제해결 remapResults="true" (0) | 2017.04.11 |
[myBatis] 오라클 다건 list insert (0) | 2015.12.24 |
[iBatis] dynamic prepend (0) | 2015.10.20 |
WRITTEN BY
,