MyBatis는 자바와 SQL 사이의 매핑을 단순화시켜주는 ORM(Object-Relational Mapping) 프레임워크입니다. 이 프레임워크를 사용하여 동적으로 SQL을 생성하고 실행하는 방법을 알아보겠습니다.
동적 SQL 구문
MyBatis에서 동적으로 SQL을 생성하기 위해서는 <trim>
, <if>
, <choose>
, <when>
, <otherwise>
와 같은 동적 SQL 구문을 사용할 수 있습니다.
<if>
구문
<if>
구문은 조건에 따라 SQL 구문을 추가하거나 생략할 수 있습니다. 다음은 예제입니다:
<select id="selectUsers" resultType="User">
SELECT * FROM users
WHERE 1=1
<if test="name != null">
AND name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
위 예제에서 name
과 email
이 null이 아닌 경우에만 해당 조건이 추가됩니다.
<choose>
, <when>
, <otherwise>
구문
<choose>
는 <when>
과 <otherwise>
를 함께 사용하여 다중 조건에 따라 SQL 구문을 선택할 수 있습니다.
<select id="selectUsers" resultType="User">
SELECT * FROM users
WHERE 1=1
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="email != null">
AND email = #{email}
</when>
<otherwise>
AND status = 'ACTIVE'
</otherwise>
</choose>
</select>
위 예제에서 name
이나 email
이 null이 아닌 경우 해당 조건을 추가하고, 그렇지 않은 경우 status = 'ACTIVE'
조건이 추가됩니다.
동적 버퍼 사용하기
동적 SQL을 생성할 때, MyBatis에서는 동적으로 생성된 SQL을 임시로 저장하기 위한 버퍼를 사용할 수 있습니다. 이를 위해 <script>
태그를 사용하여 SQL 구문을 감싸고, ${}
를 사용하여 변수를 참조할 수 있습니다.
<select id="selectUsers" resultType="User">
<script>
SELECT * FROM users
WHERE 1=1
<if test="name != null">
AND name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
<if test="status != null">
AND status = #{status}
</if>
</script>
</select>
위 예제에서 <script>
태그 안에 동적 SQL 구문을 작성하고, <if>
구문을 사용하여 필요한 조건을 추가하였습니다.
이렇게 작성된 동적 SQL은 런타임 시점에 MyBatis에서 평가되어 실제 SQL로 변환됩니다.
결론
MyBatis에서 동적 SQL을 사용하여 조건에 따라 다른 SQL을 생성하고 실행하는 방법을 알아보았습니다. <if>
, <choose>
, <when>
, <otherwise>
와 같은 동적 SQL 구문을 사용하여 필요한 조건을 추가하고, <script>
태그를 사용하여 동적 SQL을 생성할 수 있습니다. 이를 통해 코드의 유연성을 높이고, 보다 간편하게 SQL을 다룰 수 있습니다.