반응형
이번 시간에는 MyBatis에서 동적 SQL을 더 세밀하게 제어할 수 있는 <choose>, <when>, <otherwise> 태그를 배워봅니다. 이 태그는 SQL 조건문을 보다 유연하게 작성할 때 사용됩니다.
1. <choose>, <when>, <otherwise> 태그란?
- SQL에서 if-else 또는 switch-case 문과 유사한 역할을 합니다.
- 하나의 조건만 만족하면 해당 블록만 실행되며, 여러 조건문을 간결하게 작성할 수 있습니다.
- <otherwise>는 모든 조건이 충족되지 않을 때 기본 동작을 정의합니다.
2. 실습: <choose>, <when>, <otherwise> 사용하기
(1) 매퍼 파일 작성
아래는 직원 리스트를 조회하는 동적 SQL 예제입니다.
<mapper namespace="com.example.mapper.EmployeeMapper">
<select id="selectEmployees" resultType="map">
SELECT employee_id, first_name, last_name, email, phone_number
FROM employees
WHERE 1 = 1
<choose>
<when test="departmentId != null">
AND department_id = #{departmentId}
</when>
<when test="jobId != null">
AND job_id = #{jobId}
</when>
<otherwise>
AND hire_date >= TO_DATE('2023-01-01', 'YYYY-MM-DD')
</otherwise>
</choose>
</select>
</mapper>
설명:
- departmentId가 제공되면 해당 부서의 직원을 조회합니다.
- jobId가 제공되면 해당 직무의 직원을 조회합니다.
- 두 조건이 모두 제공되지 않으면 기본적으로 2023년 1월 1일 이후에 고용된 직원을 조회합니다.
(2) Mapper 인터페이스 작성
package com.example.mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface EmployeeMapper {
List<Map<String, Object>> selectEmployees(@Param("departmentId") Integer departmentId,
@Param("jobId") String jobId);
}
(3) 테스트 코드 작성
package com.example;
import com.example.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class TestRunner implements CommandLineRunner {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public void run(String... args) throws Exception {
Integer departmentId = null; // 부서 ID
String jobId = "IT_PROG"; // 직무 ID
List<Map<String, Object>> employees = employeeMapper.selectEmployees(departmentId, jobId);
if (!employees.isEmpty()) {
for (Map<String, Object> employee : employees) {
System.out.println("직원 정보: " + employee);
}
} else {
System.out.println("조회된 직원이 없습니다.");
}
}
}
3. 동작 원리
- departmentId와 jobId는 동적 파라미터로 전달되며, 조건에 따라 SQL이 결정됩니다.
- departmentId와 jobId가 모두 null인 경우 <otherwise> 블록이 실행되어 기본 조건이 적용됩니다.
4. <choose> 태그의 장점
- 명확한 조건 처리: 여러 조건 중 하나만 실행되므로 중복 실행을 방지합니다.
- 코드 가독성: SQL 조건문을 간결하게 표현할 수 있습니다.
- 유연성 제공: 다양한 시나리오를 동적으로 처리할 수 있습니다.
5. 오늘의 요약
- <choose> 태그는 SQL에서 switch-case와 유사한 역할을 수행합니다.
- <when>은 각 조건을 정의하며, <otherwise>는 기본 동작을 설정합니다.
- 이 구조를 활용하면 다양한 조건을 효과적으로 처리할 수 있습니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
MyBatis 동적 SQL 활용하기 (0) | 2025.01.01 |
---|---|
MyBatis 다중 테이블 조인 처리 (0) | 2025.01.01 |
MyBatis의 동적 SQL 처리 - <set> 태그 (0) | 2024.12.31 |
MyBatis의 동적 SQL 처리 - <where>와 <trim> 태그 (0) | 2024.12.31 |
MyBatis의 동적 SQL 처리 - <if>와 <choose> 태그 (0) | 2024.12.31 |