상황.
회원정보를 수정할 때 VO객체가 아닌
수정 할 해당 field 정보만 map객체로 받아왔을 때
map객체를 Mybatis에서 처리하는 방법
총 3가지 Case
1. Map에 여러가지 정보가 담겼을때 (컬럼명과 value값을 모두 전달해야할 때)
2. Map의 Key값을 DB column명으로 하고 수정해야할 내용을 Value값으로 할때
2-1. Java단(Mybatis mapper XML)에서 처리하기
2-2. SQL(db)단에서 처리하기
DB column : id, pass, name, addr
파라미터 : Map 객체
1. Map에 여러가지 정보가 담겼을 때
상황1. 여러 정보를 담은 Map을 가져와서 mybatis로 SQL 작성할때
map 객체
Key값 | Value값 |
field | addr |
data | 서울시 종로구 |
memId | donald |
mapper파일
<!-- map 객체 정보 -->
Map<String, String> map = Map.of("field", "addr, "data", "서울시 종로구", "memId", "donald");
<!-- Mybatis Mapper파일 -->
<update id="updateMember2" parameterType="map">
update mymember set ${field} = #{data} where mem_id = #{memId}
</update>
- Map 객체의 Key값을 기준으로 호출하여 Value값을 불러 올 수 있음
- ${(Key값)} - Value값을 SQL구문에 평문으로 넣는다
- #{(Key값)} - Value값을 SQL구문에 쌍따옴표("")를 씌워서 넣는다
2. Map (Key - DB컬럼명, Value - 변경할내용)
상황.
수정해야할 Column이 그때 그때 달라서. 수정할내용만 Map에 담아서
전달
2-1 Java단(Mybatis mapper XML)에서 처리하기.
Key값(필드값) | Value값 |
pass | 1234 |
name | 홍길동 |
memId | donald |
<update id ="update" parameterType="map">
update mymember
<set>
<if test="pass !=null"> pass = #{pass},</if>
<if test="name !=null"> name = #{name},</if>
<if test="addr !=null"> addr = #{addr},</if>
</set>
where mem_id = #{memId}
</update>
- if문으로 해당 column key값이 없을땐 if문으로 쿼리를 제한한다.
2-2. SQL(db)단에서 처리하기
<update id="updateUserById" parameterType="map">
UPDATE users SET
pass = IFNULL(#{pass}, pass),
name = IFNULL(#{name}, name),
addr = IFNULL(#{addr}, addr)
WHERE id = #{memId}
</update>
- SQL구문 IFNULL() 메서드를 사용해서 처리
출처 - 본인
댓글