[Mybatis] Map안에 List 순회하기

Roiana·2021년 8월 23일
2
post-thumbnail

첫 블로그 글이 오늘 하루 삽질을 한 내용이다..😑
거창한 내용은 아니지만 누군가에게는 도움을 줄 수도 있을거라는 희망을 품고 글을 작성해본다.😳

😨 mybatis를 이용하여 select 해야하는데 넘어가는 파라미터가 Map<String, Object> 타입

parameter

Map<String, Object> paramMap = new HashMap<>();
paramMap.put("option", optionList); /* optionList = List<String> */
paramMap.put("info", searchInfo); /* searchInfo객체에는 keyword 멤버변수가 존재 */

mybatis

<select id="searchList" resultType="vo">
  SELECT * FROM t_sample
  WHERE type = 2
  	<if test="option.size != 0">
  	AND option NOT IN
      		<foreach collection="option" item="item" open="(" separator="," close=")">
              	#{item}
      		</foreach>
  	</if>
  	<if test="info.keyword != null and !info.keyword.equals('')">
         AND name LIKE '%'||#{info.keyword}||'%'
    </if>
</select>

설명

  • <if test="option.size != 0">
    OptionList의 값이 존재한다면 TRUE.
    만약 list가 존재하지 않는데 foreach를 순회하면 error를 확인할 수 있다.

  • <foreach collection="option" item="item" open="(" separator="," close=")">
    foreach collection은 OptionList를 의미하며, List의 갯수만큼 순회한다.

  • <if test="info.keyword != null and !info.keyword.equals('')">
    info는 우리가 Map으로 가져온 searchInfo이며, searchInfo에는 keyword라는 멤버변수가 존재한다.
    keyword가 존재하지 않으면 error를 뿜뿜하기에 keyword != null 이며, !keyword.equals('') 라고 예외처리를 해준다.
    주의! #{info.keyword}가 아닌 #{info} 만 하면 error 뿜뿜 😱
💡 mybatis는 파라미터가 클래스의 객체인 경우 해당 클래스의 getter 메서드에 대응되서 mapper 변수가 값을 획득한다. 또한, Map에 담아서 넘길 경우 Map객체의 Key값과 Mapper의 변수가 1:1로 대응되서 값이 전달되므로 이름을 꼭 맞춰야한다.

Mybatis foreach문 지원 태그

옵션설명
collection전달받은 인자값
index목록의 위치값
item전달받은 인자값을 다른 이름으로 재정의시 사용(foreach 구문에서 사용할 변수명)
openforeach 구문이 시작할 때 넣을 문자
closeforeach 구문이 끝날 때 넣을 문자
separator한번 이상 반복할때 구분자


처음으로 글을 써보는거라 많이 떨린다.. 부족함이 어~~~~엄청 많지만 오늘보다 나은 내일의 내가 되기 위해 오늘의 나는 힘내봅니다😤
profile
꾸준히 공부하려고 노력하고있는 새싹 개발자 Roiana 입니다 😊

1개의 댓글

comment-user-thumbnail
2022년 3월 21일

희망이 되어 주셔서 감사합니다...!!!!

답글 달기