본문 바로가기
Spring/API, Library 정리

[MyBatis] Map객체를 파라미터로 입력받아 update쿼리 하는 방법

by 코플+ 2023. 3. 23.
상황.
회원정보를 수정할 때 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() 메서드를 사용해서 처리

출처 - 본인

댓글