IT/development

[mybatis] dynamic query template

알 수 없는 사용자 2023. 12. 24. 15:44
반응형

나중에 내가 사용하기 위해 동적 쿼리 template을 기록한다.

<where>
<choose>
    <!-- 회원구분 -->
    <when test="mberGubun != null and mberGubun != ''">
        <if test="mberGubun =='GNR'">
            AND B.CODE IS NULL
        </if>
        <if test="mberGubun =='ENT'">
            AND B.CODE IS NOT NULL
        </if>
    </when>
</choose>
<choose>
    <!-- 가입상태 -->
    <when test="mberSttus != null and mberSttus != ''">
        <if test='mberSttus == "A"'>
            AND C.CODE = 'A'
        </if>
        <if test='mberSttus == "D"'>
            AND C.CODE = 'D'
        </if>
        <if test='mberSttus == "P"'>
            AND C.CODE = 'P'
        </if>
    </when>
</choose>
<!-- 소속코드 -->
<if test="entrprsSeCd != null and entrprsSeCd != ''">
    AND B.CODE = #{entrprsSeCd}
</if>
<!-- 연락처 -->
<if test="mbtlnum != null and mbtlnum != ''">
    AND A.MBTLNUM LIKE '%' || #{mbtlnum} || '%'
</if>
<!-- 회원명 -->
<if test="mberNm != null and mberNm != ''">
    AND A.MBER_NM LIKE '%' || #{mberNm} || '%'
</if>
</where>

위 동적쿼리는 이렇게 작동한다.

<where></where>를 통해 넘어온 parameter의 조건 일치여부에 따라 AND절을 동적으로 추가 또는 생성

예를 들면 다음과 같다.

1. mberGubun값만 'GNR'인 경우(일반회원만)
//SELECT 절 생략
WHERE B.CODE IS NULL(원래 있던 AND는 사라짐)

2. mberGubun값 'GNR'이면서 mberSttus이 'D'인 경우(일반회원 중 가입삭제인 경우만)
WHERE B.CODE IS NULL(역시 원래 있던 AND는 사라짐)
  AND C.CODE = 'D'
  
3. mberGubun값 'GNR'이면서 mberSttus이 'D'인 경우이고 entrprsSeCd가 있는 경우(가입상태가 삭제인 일반회원 중 소속이 있는 경우)
WHERE B.CODE IS NULL(역시 원래 있던 AND는 사라짐)
  AND C.CODE = 'D'
  AND B.CODE = '003'

... 이하 생략

개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

반응형