일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스프링 업로드
- 삭제 구현
- 회원가입 기능
- 스프링 HikariCP
- 정규표현식
- 쇼핑몰 프로젝트
- 파일 업로드
- 스프링 파일 삭제
- arraylist
- 스프링 게시판
- 스프링 프로젝트
- spring 쇼핑몰
- 스프링 프로젝트 기본 설정
- 스프링 메일 전송
- 로그인 기능
- oracle 설치방법
- 로그아웃 기능 구현
- ResponseEntity
- 인증번호 전송
- 스프링 쇼핑몰 프로젝트
- 이미지 출력
- 스프링 이미지
- 스프링 게시판 구현
- spring 프로젝트
- 스프링 포트폴리오
- 스프링 프로젝트 설정
- 스프링 쇼핑몰
- BCrypt 적용
- Bcrypt
- 쇼핑몰 포트폴리오
- Today
- Total
Kim VamPa
[MyBatis] <choose>, <when>, <otherwise> 본문
목표
MyBatis에서 사용하는 <choose>, <when>, <otherwise> 사용법
<choose>, <when>, <otherwise>를 왜 사용하고 어떻게 사용하는지를 이해합니다.
순서
1. <choose>, <when>, <otherwise> 이해
2. 예제
1. <choose>, <when>, <otherwise> 이해
<if>태그와 같이 조건식이 참일 경우 쿼리문을 실행해주는 역할을 합니다. 다른점은 여러개의 <if>태그 사용경우 조건식이 true를 반환하는 <if>태그는 모두 쿼리문이 실행됩니다. 하지만 <choose> 태그내의 여러개의 <when> 태그문의 경우 조건식이 true를 반환하는 <when>태그를 찾으면 거기서 멈추고 해당 <when>태그의 쿼리만 실행합니다. 다시말해 조건식을 가진 여러개의 <when>태그 오로지 한개의 <when>태그내부 쿼리만 실행됩니다. 대부분의 프로그래밍 언어에서 사용되는 if else와 비슷한 역할을 합니다.
<choose> 태그 안에서 <when>태그와 <otherwise>를 작성합니다. <when>태그는 각각 조건식(test 속성)을 가지며 여러번 작성할 수 있습니다. 실행 시 <when>태그의 조건식을 순서대로 확인하여 true를 반환하는 <when>태그 안의 쿼리문을 실행하게 됩니다. 만약 <when>태그의 조건식중 true 반환한 것이 없다면 <otherwise> 태그 내에 작성된 쿼리문이 실행됩니다. <otherwise>태그는 생략 가능합니다.
<choose>
<when test="조건식1"> 쿼리문1 </when>
<when test="조건식2"> 쿼리문2 </when>
<when test="조건식3"> 쿼리문3 </when>
<when test="조건식4"> 쿼리문4 </when>
<otherwise> 쿼리문5 </otherwise>
</choose>
2. 예제
아래는 MyBatis 공식 홈페이지의 <if>태그 예제를 입니다.
<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
아래는 <choose>,<when>을 사용한 예제입니다.
<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test=test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
</choose>
</select>
얼핏 똑같은 역할을 한다고 생각할 수 있습니다. 하지만 결과는 확연히 다릅니다. 위의 <if>태그를 사용한 예제의 경우 <if>태그 조건식 둘다 ture면, 각 <if>태그가 가지고 있는 쿼리문 2개를 모두 실행합니다. 하지만 <choose>,<when>예제의 경우 <when>태그의 조건식이 true이면 다음<when>의 조건식을 탐색하지 않고 하나의 쿼리문만 실행하게됩니다.
REFERENCE
DATE
- 2020.03.06
'공부 > 데이터베이스' 카테고리의 다른 글
[MyBatis] <foreach> 사용법 (0) | 2021.03.08 |
---|---|
[MyBatis] <trim> 사용법 (5) | 2021.03.07 |
[MyBatis] <sql>, <include> 사용법 (2) | 2021.03.05 |
[MyBatis] <if> 사용법 (1) | 2021.03.04 |
자동값 증가(Oracle, MySQL)(IDENTITY, AUTO_INCREMENT) (4) | 2021.02.03 |