<< 학습 목표 >>
1. set 태그를 활용할 수 있다.
set 태그로 동적 쿼리를 구성하는 방법은 where 태그와 동일함
그래서 여기서는 곧바로 간단한 예시 하나로 set 태그로 동적 쿼리를 구성하는 방법만 배우자
회원 정보를 수정하는 기능이 있는 상황임
회원 정보는 비밀번호, 닉네임, 연락처 중 하나만 수정할 수도 있고 모두 수정할 수도 있음
수정하지 않을 값은 전달 하지 않고 수정할 값믄 전달함
이런 상황에서 set 태그를 사용해 다음과 같이 동적 쿼리를 만들 수 있음
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.chapter04.MemberDao">
// ...
<update id="updateMember" parameterType="com.study.chapter04.StudygroupMember">
UPDATE member
<set>
<if test="pw != null">pw = #{pw},</if>
<if test="nickname != null">nickname = #{nickname},</if>
<if test="tel != null">tel = #{tel},</if>
</set>
WHERE id = #{id}
</update>
// ...
</mapper>
<< 코드 설명 >>
update 태그가 동작할 때 만들어질 수 있는 쿼리는 8가지임
1. 비밀번호, 닉네임, 연락처 모두 전달 받지 못했을 경우
-> UPDATE member WHERE id = #{id}
2. 비밀번호만 전달 받았을 경우
-> UPDATE member SET pw = #{pw} WHERE id = #{id}
3. 닉네임만 전달 받았을 경우
-> UPDATE member SET nickname = #{nickname} WHERE id = #{id}
4. 연락처만 전달 받았을 경우
-> UPDATE member SET tel = #{tel} WHERE id = #{id}
5. 비밀번호와 닉네임을 전달 받았을 경우
-> UPDATE member SET pw = #{pw}, nickname = #{nickname} WHERE id = #{id}
6. 비밀번호와 연락처를 전달 받았을 경우
-> UPDATE member SET pw = #{pw}, tel = #{tel} WHERE id = #{id}
7. 비밀번호, 닉네임, 연락처 모두 전달 받았을 경우
-> UPDATE member SET pw = #{pw}, nickname = #{nickname}, tel = #{tel} WHERE id = #{id}
8. 닉네임과 연락처를 전달 받았을 경우
-> UPDATE member SET nickname = #{nickname}, tel = #{tel} WHERE id = #{id}
여기서 특징적인 점을 보자
set 태그 안에 if의 조건을 만족하면 [ pw = #{pw}, ] 또는 [ nickname = #{nickname} ] 또는 [ tel = #{tel} ] 이 추가되는데 각 상황에서 만들어지는 쿼리를 보면 SET의 마지막에 ( 또는 WHERE 가 시작 되기 전에 ) , 가 없음
set 태그는 마지막에 , 를 지워줌
set 태그를 trim 태그로 대신 구현하면 아래와 같음
<update id="updateMember" parameterType="com.study.chapter04.StudygroupMember">
UPDATE member
<trim prefix="SET" suffixOverrides=",">
<if test="pw != null">pw = #{pw},</if>
<if test="nickname != null">nickname = #{nickname},</if>
<if test="tel != null">tel = #{tel},</if>
</trim>
WHERE id = #{id}
</update>
'Spring + Boot > Boot-Chapter04' 카테고리의 다른 글
Chapter04. Spring Boot - DB / MyBatis 심화, sql, include, property 동적 쿼리 (1) | 2023.05.30 |
---|---|
Chapter04. Spring Boot - DB / MyBatis 심화, bind, resultMap 동적 쿼리 (0) | 2023.05.29 |
Chapter04. Spring Boot - DB / MyBatis 심화, WHERE 동적 쿼리 (0) | 2023.05.28 |
Chapter04. Spring Boot - DB / MyBatis 심화, 동적 쿼리 (0) | 2023.05.28 |
Chapter04. Spring Boot - DB / MyBatis 심화, INSERT 시 PK값 돌려받기 (0) | 2023.05.27 |