[java] MyBatis 동적 쿼리 생성
많은 경우에 데이터베이스 쿼리는 동적으로 생성되어야 합니다. 예를 들어 사용자 입력이나 다른 조건에 따라 WHERE 절이 동적으로 변경되어야 하는 경우 등이 그 예입니다. MyBatis를 사용하면 동적 쿼리를 쉽게 생성할 수 있습니다.
1. 동적 SQL 사용하기
MyBatis에서는 <if>
, <choose>
, <when>
, <otherwise>
와 같은 XML 요소를 사용하여 동적 SQL을 생성할 수 있습니다.
예를 들어, WHERE
절을 동적으로 생성하는 SQL 매핑은 다음과 같이 작성될 수 있습니다.
<select id="selectUsers" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="id != null">
AND id = #{id}
</if>
</where>
</select>
위의 예제에서 name
과 id
파라미터에 따라 WHERE
절이 동적으로 추가됩니다.
2. 동적 쿼리 빌더 사용하기
MyBatis 3.5.0 버전부터는 SqlBuilder
인터페이스를 이용하여 프로그래밍적으로 동적 쿼리를 구성할 수 있습니다. 이를 활용하면 XML을 사용하지 않고도 동적 SQL을 생성할 수 있습니다.
@SelectProvider(type = UserSqlBuilder.class, method = "buildSelectQuery")
User selectUsers(Map<String, Object> params);
public class UserSqlBuilder {
public static String buildSelectQuery(Map<String, Object> params) {
SQL sql = new SQL().SELECT("*").FROM("users");
if (params.get("name") != null) {
sql.WHERE("name = #{name}");
}
if (params.get("id") != null) {
sql.WHERE("id = #{id}");
}
return sql.toString();
}
}
3. 결과
동적 쿼리 생성에는 XML을 사용하는 방법과 동적 쿼리 빌더를 사용하는 방법이 있습니다. 어떤 방법을 선택하든 MyBatis를 사용하여 동적 쿼리를 쉽게 생성할 수 있습니다.
이 밖에도 MyBatis에서 동적 쿼리 생성에 대한 상세 내용은 MyBatis 공식 문서를 참고할 수 있습니다.