MyBatis는 자바 ORM(Object Relational Mapping) 프레임워크로, 데이터베이스와의 상호작용을 쉽게 할 수 있도록 도와줍니다. MyBatis를 사용할 때, 동적 SQL 작성은 매우 유용합니다. 동적 SQL은 조건에 따라 쿼리문을 유연하게 작성할 수 있게 해줍니다.
IF 조건문
IF 조건문은 제일 일반적으로 사용되는 동적 SQL 작성 방법입니다. 이를 사용하면 조건에 따라서 SQL 쿼리문에서 조건절을 추가하거나 생략할 수 있습니다.
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
위의 코드에서, name
과 age
가 null이 아닌 경우에만 조건절을 추가합니다. 만약 name
이 null이면 AND name = #{name}
은 생략되고, age
가 null이면 AND age = #{age}
는 생략됩니다.
CHOOSE 조건문
CHOOSE 조건문은 여러 개의 조건 중에서 하나를 선택할 수 있도록 도와줍니다. 주로 연속적인 if-else
문을 대체하는데 사용됩니다.
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND isActive = true
</otherwise>
</choose>
</select>
위의 코드에서, name
이 null이 아니라면 AND name = #{name}
이 실행되고, age
가 null이 아니라면 AND age = #{age}
이 실행됩니다. 그 외의 경우에는 AND isActive = true
이 실행됩니다.
FOREACH 반복문
FOREACH 반복문은 주로 리스트나 배열과 같은 자료구조를 순회하면서 동적인 쿼리문을 작성할 때 사용합니다.
<foreach collection="userList" item="user" separator=",">
INSERT INTO user (name, age) VALUES (#{user.name}, #{user.age})
</foreach>
위의 코드에서, userList
는 User 객체를 담고 있는 리스트입니다. FOREACH 반복문을 사용하여 리스트의 요소를 하나씩 가져와서 쿼리문을 실행합니다.
마치며
MyBatis에서 동적 SQL 작성은 조건에 따라 유연하게 쿼리를 작성할 수 있는 좋은 기능입니다. IF 조건문, CHOOSE 조건문 및 FOREACH 반복문을 사용하여 복잡한 쿼리문을 작성할 수 있습니다.
더 많은 MyBatis의 기능과 사용법은 MyBatis 공식 문서를 참조하시기 바랍니다.