MySQL에서도 if나 case 같은 조건문을 사용할 수 있는데 XML에서의 if문 사용한 것을 복습해본다.
기본적인 테이블 데이터 선택 방법은 아래와 같이 간단하다.
<select id="list" parameterType="Member" resultMap="MemberMap" >
SELECT * FROM MEMBER
</select>
여기에서 조건을 추가해본다.
만약에 타입이라는 조건이 있고 이 조건을 넣었을 때, 안 넣었을 때의 데이터를 뽑아야 한다고 가정하면 아래와 같다.
<select id="list" parameterType="Member" resultMap="MemberMap" >
SELECT * FROM MEMBER
<choose>
<when test="type.equals('')">
WHERE type LIKE "%"
</when>
<otherwise>
WHERE type=#{type}
</otherwise>
</choose>
</select>
조건을 넣지 않았을 때는 모든 데이터를 가져오는 WHERE 절을 넣으면 된다.
보통 조건을 넣지 않을 때는 검색을 안 하면 되는데 나의 경우 조건이 4가지였다.
조건1, 조건2, 조건3, 조건4
그래서 기준이 되는 조건을 type으로 정해두기 위해서 저렇게 짠 거다.
이게 내가 생각해낸 한계치...
이제 조건2, 3, 4에 대한 중복 조건인데 다음과 같이 짜면 된다.
어차피 몇 개가 되든 if문이 똑같이 들어가기 때문에 상관없다.
<select id="list" parameterType="Member" resultMap="MemberMap" >
SELECT * FROM MEMBER
<choose>
<when test="type.equals('')">
WHERE type LIKE "%"
</when>
<otherwise>
WHERE type=#{type}
</otherwise>
</choose>
<if test="!createDate.equals('')">
AND cre_dt=#{createDate}
</if>
<if test="!createDate.equals('')">
<!-- 조건 3.. -->
</if>
<if test="!createDate.equals('')">
<!-- 조건 4.. -->
</if>
</select>
이렇게 하면 4가지 조건에 대한 16가지 경우의 데이터를 쿼리문 하나로 추출할 수 있다.
처음엔 무식하게 16가지 경우의 수에 대한 쿼리문을 다 작성하려고 했었는데
MySQL 같은 걸 만든 사람이 이런 기능을 안 만들었을리가 없다고 생각해서 공부했다.
까먹지 말자 ..