본문 바로가기
📚Framework & Library/MyBatis

[MyBatis] Dynamic Query. 동적 쿼리

by inbeom 2023. 9. 10.
728x90

1. 기본적인 동적 쿼리

  • map 형식으로 검색 타입과 키워드를 받아와서 처리했다. WHERE 절에서 검색 타입은 ${ } 로 전달하며 키워드는 #{ } 로 전달한다.
  • ${ } 는 파라미터 값이 그대로 들어가며 #{ } 는 파라미터 값이 ' ' 으로 감싸진다.
<select id="search" resultMap="searchVo" parameterType="map">
	 SELECT * FROM KH.EMPLOYEE WHERE ${searchType} = #{keyword}
</select>

 

2. if문을 이용한 동적 쿼리

  • if문을 이용하는 방법은 EL 처럼 test 속성에 조건을 넣어주면 된다.

SELECT * FROM EMPLOYEE WHERE 1=1

  • 모든 if문의 조건이 맞지 않는 다면 위의 쿼리문의 결과만 리턴될 것이다.
  • 만약 gender 값이 있다면

SELECT * FROM EMPLOYEE WHERE 1=1 AND GENDER = #{gender}

  • 이런 쿼리문으로 동작할 것이다.
<select id="search" resultMap="searchVo">
      SELECT * FROM EMPLOYEE WHERE 1=1 
      <if test="searchType != null and searchType != ''">
          AND NAME LIKE '%' || #{keyword} || '%'
      </if> 
      <if test="gender != null and gender != ''">
          AND GENDER = #{gender}
      </if>      
</select>

 

3. choose, when, otherwise 를 이용한 동적 쿼리

  • if문을 이용할 때와 방식은 동일하다.
  • choose문을 이용하는 방법도 EL 과 같다.
  • if문을 이용하면 조건에 맞는 모든 결과를 볼 수 있지만, choose 문을 이용하면 조건에 맞는 한가지 경우만 볼 수 있다.
<select id="search" resultMap="searchVo">
      SELECT * FROM EMPLOYEE WHERE 1=1 
      <choose>
       <when test="searchType != null and searchType != ''">
          AND NAME LIKE '%' || #{keyword} || '%'
       </when> 
       <when test="gender != null and gender != ''">
          AND GENDER = #{gender}
       </when>
       <otherwise>
          AND ID = 1
       </otherwise>
      </choose>
  </select>

 

4. foreach문을 이용한 동적 쿼리

  • foreach문을 이용하면 배열이나 List 등으로 값이 넘어왔을 때 처리해줄 수 있다.
  • collection 속성에 배열, List 객체가 들어가며 item 속성은 변수 이름을 지정한다.
  • index 속성은 인덱스 변수 이름을 지정한다.
  • open과 close 속성은 collection을 처리할 때 열고 닫는 문자열을 정하는 것이다.
  • separator 속성은 구분자이다.
  • open="(" close=")" separator="," 로 설정했기 때문에 (1, 2, 3, 4) 처럼 값이 들어갈 것 이다.
<select id="search3" parameterType="map" resultMap="searchVo"> 
   SELECT EMPLOYEE WHERE ID IN
   <foreach collection="job" item='item' index='i' open="(" close=")" separator=",">
      #{item}              
   </foreach>
</select>
728x90

'📚Framework & Library > MyBatis' 카테고리의 다른 글

[MyBatis] 기본 세팅 및 사용 방법  (0) 2023.09.10
[MyBatis] MyBatis란  (0) 2023.09.08