MyBatis

<set>, <where>

99duuk 2024. 9. 9. 10:50

1. <set> 

UPDATE 구문에서 동적으로 SET 절을 생성할 때 사용함. 불필요한 쉼표를 자동으로 제거해줌.

<set>
    SQL 구문
</set>
  • SET 키워드를 자동으로 추가함
  • 내부 조건들 중 마지막에 있는 불필요한 쉼표를 자동으로 제거함
  • 모든 내부 조건이 false일 경우 SET 절 자체가 생성되지 않음
<update id="updateAuthor">
    UPDATE Author
    <set>
        <if test="username != null">username = #{username},</if>
        <if test="password != null">password = #{password},</if>
        <if test="email != null">email = #{email},</if>
    </set>
    WHERE id = #{id}
</update>

Author 테이블의 레코드를 동적으로 업데이트

 

  • username, password, email 중 값이 제공된 필드만 업데이트함
  • 마지막 필드 뒤의 불필요한 쉼표가 자동으로 제거됨
  • 어떤 필드도 업데이트되지 않을 경우 SET 절이 생성되지 않음

 

 


2. <where>

WHERE 절을 동적으로 생성할 때 사용함. 불필요한 AND나 OR를 자동으로 제거해줌.

<where>
    SQL 구문
</where>
  • WHERE 키워드를 자동으로 추가함
  • 내부 조건들 중 첫 번째 조건 앞의 AND 또는 OR를 자동으로 제거함
  • 모든 내부 조건이 false일 경우 WHERE 절 자체가 생성되지 않음
<select id="findActiveUsersByName" resultType="User">
    SELECT * FROM users
    <where>
        <if test="status != null">
            status = #{status}
        </if>
        <if test="name != null">
            AND name LIKE #{name}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
    </where>
</select>

사용자를 동적으로 검색

 

  • status, name, email 조건 중 제공된 조건만 사용하여 검색함
  • 조건이 하나도 없으면 모든 사용자를 검색함
  • 첫 번째 조건 앞의 불필요한 AND가 자동으로 제거됨
  • 조건이 없을 경우 WHERE 절 자체가 생성되지 않음

 



'MyBatis' 카테고리의 다른 글

계층 쿼리 (중첩 SELECT_mysql, CTE_mysql, CONNECT BY_oracle)  (0) 2024.09.09
@변수명 :=  (0) 2024.09.09
<sql>, <include>, <selectKey>  (0) 2024.09.09
<if>, <foreach>, <trim>  (0) 2024.09.09
<choose>, <when> , <bind>  (0) 2024.09.09