MySQL2018. 4. 24. 00:37

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 같은 걸 만든 사람이 이런 기능을 안 만들었을리가 없다고 생각해서 공부했다.


까먹지 말자 ..

'MySQL' 카테고리의 다른 글

MySQL + MyBatis INSERT 성공 후 Primary Key 값 받아오기  (0) 2017.12.13
Posted by 홍규홍규