카테고리 없음

MyBatis 동적 SQL 쿼리

yisj 2023. 10. 18. 10:10

예를 들어 게시판에서 검색 기능을 구현할 때 다음의 요소가 조합되어 구현될 수 있다. 

  • 검색 기준(keytype): 글쓴이(writer), 제목(title), 내용(content)
  • 검색어(keyword)
  • 정렬 기준(orderby): 글쓴이(writer), 제목(title), 조회수(view_cnt)
  • 정렬 방향(orderbydir): 오름차순(asc), 내림차순(desc)

예를 들어 검색 기준을 select 태그로 나타내면 다음과 같을 것이다.

<select name="keytype">
  <option value="title">제목</option>
  <option value="writer">글쓴이</option>
  <option value="content">내용</option>
</select>

 

이 때, 검색 기준, 정렬 기준, 정렬 방향은 여러 가지의 옵션이 있으며, 각 옵션을 선택할 때마다 SQL 쿼리문이 달라져야 한다. 이렇게 여러 조건에 대응하여 동적으로 SQL 쿼리문을 생성하는 것을 동적 SQL 쿼리라고 한다.

MyBatis에서는 다음과 같이 태그를 사용하여 구현이 가능하다.

SELECT * FROM ...
<if test="keytype != 'none'">
  WHERE ${keytype} = #{keyword}
</if>
<if test="orderby != 'none'">
  ORDER BY ${orderby} ${orderbydir}
</if>