웹 개발

[Spring Boot] Mybatis 동적쿼리

_KH_ 2025. 5. 13. 09:42
Mybatis에서 동적 쿼리란?

 

>> 우선 "정적 쿼리"란?

: 고정된 조건의 쿼리를 말함 (항상 해당 조건에 맞는 값만 출력)

SELECT * FROM MEMBER WHERE GENDER = 'F';

 

>> "동적 쿼리"란?

SELECT * FROM MEMBER 
WHERE 1=1
<if test="gender != null">
   AND GENDER = #{gender}
</if>
<if test="age != null">
   AND AGE &gt; #{age}
</if>

Mybatis XML에서는 위처럼 <if> 조건을 사용하여 사용자가 선택한 필터에 따라 SQL이 유동적으로 달라지는 것을 동적 쿼리라고 한다.

 


실제 사용 예시 (MyBatis XML)

<select id="searchMembers" resultType="MemberVO">
  SELECT * FROM MEMBER
  WHERE 1=1
  // WHERE 1=1 은 항상 참(True)인 조건을 말함
  // SELECT * FROM MEMBER 와 같다.
  
  <if test="gender != null">
    AND GENDER = #{gender}
    // where 1=1이 있기 떄문에 AND를 첫 조건에도 쓸 수 있고,
    // 여러 개의 AND를 붙여도 된다.
  </if>
  <if test="keyword != null">
    AND MEMBER_NAME LIKE CONCAT('%', #{keyword}, '%')
  </if>
</select>

WHERE 1=1을 쓰면, 조건이 하나든 둘이든 항상 AND 조건 형태로 붙일 수 있다.