[java] MyBatis의 동적 SQL과 정적 SQL

서론

MyBatis는 자바를 위한 SQL 매퍼 프레임워크로, 데이터베이스와의 상호작용을 쉽게 처리할 수 있도록 도와줍니다. MyBatis에는 동적 SQL과 정적 SQL이라는 두 가지 주요한 기능이 있습니다. 이번 글에서는 이 두 가지 기능에 대해 자세히 알아보겠습니다.

동적 SQL

동적 SQL은 실행 시에 SQL 쿼리를 동적으로 생성하는 기능을 말합니다. 이는 데이터베이스 상황에 따라 다양한 케이스를 처리하기 위해 사용됩니다. MyBatis에서는 <if>, <choose>, <when>, <otherwise> 등의 태그를 사용하여 동적 SQL을 작성할 수 있습니다. 이렇게 작성된 동적 SQL은 실행 시에 조건에 따라 SQL문이 다르게 구성되어 실행됩니다.

<select id="getUserList" resultMap="userMap">
  SELECT * FROM users
  <where>
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="name != null">
      AND name = #{name}
    </if>
  </where>
</select>

위의 예제에서는 id와 name 파라미터에 따라 SQL문이 동적으로 생성됩니다. id나 name이 주어지지 않은 경우 해당 조건은 무시되고 모든 사용자가 반환됩니다. 동적 SQL은 매우 편리한 기능으로, 복잡한 쿼리를 작성하거나 다양한 조건에 따라 동적으로 쿼리를 변경해야 할 때 유용합니다.

정적 SQL

정적 SQL은 미리 정의된 SQL 쿼리를 사용하여 데이터베이스와 상호작용하는 기능을 말합니다. 동적 SQL과 달리 정적 SQL은 실행 시에 SQL문이 변경되지 않습니다. MyBatis에서는 XML 파일이나 어노테이션을 사용하여 정적 SQL을 작성할 수 있습니다.

<select id="getUser" parameterType="int" resultMap="userMap">
  SELECT * FROM users
  WHERE id = #{id}
</select>

위의 예제에서는 id 파라미터에 해당하는 사용자를 반환하는 정적 SQL이 작성되었습니다. 이 쿼리는 실행 시에 항상 동일한 SQL문을 사용하게 됩니다.

결론

MyBatis는 동적 SQL과 정적 SQL이라는 두 가지 주요한 기능을 제공합니다. 동적 SQL은 실행 시에 SQL문을 동적으로 생성하여 다양한 조건에 따라 쿼리를 변경할 수 있게 해주며, 정적 SQL은 미리 정의된 SQL 쿼리를 사용하여 데이터베이스와 상호작용합니다. 이러한 기능들은 데이터베이스 작업을 훨씬 간편하게 처리할 수 있도록 도와줍니다.

참고 자료